1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* drivers/video/backlight/ili9320.h 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * ILI9320 LCD controller driver core. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright 2007 Simtec Electronics 7*4882a593Smuzhiyun * Ben Dooks <ben@simtec.co.uk> 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * http://armlinux.simtec.co.uk/ 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* Holder for register and value pairs. */ 13*4882a593Smuzhiyun struct ili9320_reg { 14*4882a593Smuzhiyun unsigned short address; 15*4882a593Smuzhiyun unsigned short value; 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct ili9320; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun struct ili9320_client { 21*4882a593Smuzhiyun const char *name; 22*4882a593Smuzhiyun int (*init)(struct ili9320 *ili, struct ili9320_platdata *cfg); 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun /* Device attached via an SPI bus. */ 26*4882a593Smuzhiyun struct ili9320_spi { 27*4882a593Smuzhiyun struct spi_device *dev; 28*4882a593Smuzhiyun struct spi_message message; 29*4882a593Smuzhiyun struct spi_transfer xfer[2]; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun unsigned char id; 32*4882a593Smuzhiyun unsigned char buffer_addr[4]; 33*4882a593Smuzhiyun unsigned char buffer_data[4]; 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* ILI9320 device state. */ 37*4882a593Smuzhiyun struct ili9320 { 38*4882a593Smuzhiyun union { 39*4882a593Smuzhiyun struct ili9320_spi spi; /* SPI attachged device. */ 40*4882a593Smuzhiyun } access; /* Register access method. */ 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun struct device *dev; 43*4882a593Smuzhiyun struct lcd_device *lcd; /* LCD device we created. */ 44*4882a593Smuzhiyun struct ili9320_client *client; 45*4882a593Smuzhiyun struct ili9320_platdata *platdata; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun int power; /* current power state. */ 48*4882a593Smuzhiyun int initialised; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun unsigned short display1; 51*4882a593Smuzhiyun unsigned short power1; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun int (*write)(struct ili9320 *ili, unsigned int reg, unsigned int val); 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* ILI9320 register access routines */ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun extern int ili9320_write(struct ili9320 *ili, 60*4882a593Smuzhiyun unsigned int reg, unsigned int value); 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun extern int ili9320_write_regs(struct ili9320 *ili, 63*4882a593Smuzhiyun const struct ili9320_reg *values, 64*4882a593Smuzhiyun int nr_values); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* Device probe */ 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun extern int ili9320_probe_spi(struct spi_device *spi, 69*4882a593Smuzhiyun struct ili9320_client *cli); 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun extern int ili9320_remove(struct ili9320 *lcd); 72*4882a593Smuzhiyun extern void ili9320_shutdown(struct ili9320 *lcd); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* PM */ 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun extern int ili9320_suspend(struct ili9320 *lcd); 77*4882a593Smuzhiyun extern int ili9320_resume(struct ili9320 *lcd); 78