Blame view

include/linux/lcd.h 4.19 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
8
9
10
11
12
  /*
   * LCD Lowlevel Control Abstraction
   *
   * Copyright (C) 2003,2004 Hewlett-Packard Company
   *
   */
  
  #ifndef _LINUX_LCD_H
  #define _LINUX_LCD_H
  
  #include <linux/device.h>
28ee086d5   Richard Purdie   backlight: Fix ex...
13
  #include <linux/mutex.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14
  #include <linux/notifier.h>
faa312da9   Eric Miao   lcd: allow lcd de...
15
  #include <linux/fb.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16

28ee086d5   Richard Purdie   backlight: Fix ex...
17
18
  /* Notes on locking:
   *
599a52d12   Richard Purdie   backlight: Separa...
19
   * lcd_device->ops_lock is an internal backlight lock protecting the ops
28ee086d5   Richard Purdie   backlight: Fix ex...
20
21
22
23
24
25
26
27
28
29
30
   * field and no code outside the core should need to touch it.
   *
   * Access to set_power() is serialised by the update_lock mutex since
   * most drivers seem to need this and historically get it wrong.
   *
   * Most drivers don't need locking on their get_power() method.
   * If yours does, you need to implement it in the driver. You can use the
   * update_lock mutex if appropriate.
   *
   * Any other use of the locks below is probably wrong.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
32
  struct lcd_device;
  struct fb_info;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33
  struct lcd_properties {
599a52d12   Richard Purdie   backlight: Separa...
34
35
36
37
38
  	/* The maximum value for contrast (read-only) */
  	int max_contrast;
  };
  
  struct lcd_ops {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
40
41
  	/* Get the LCD panel power status (0: full on, 1..3: controller
  	   power on, flat panel power off, 4: full off), see FB_BLANK_XXX */
  	int (*get_power)(struct lcd_device *);
d54ad83f3   Inki Dae   lcd: add callback...
42
43
44
45
46
47
48
49
50
51
  	/*
  	 * Enable or disable power to the LCD(0: on; 4: off, see FB_BLANK_XXX)
  	 * and this callback would be called proir to fb driver's callback.
  	 *
  	 * P.S. note that if early_set_power is not NULL then early fb notifier
  	 *	would be registered.
  	 */
  	int (*early_set_power)(struct lcd_device *, int power);
  	/* revert the effects of the early blank event. */
  	int (*r_early_set_power)(struct lcd_device *, int power);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52
53
  	/* Enable or disable power to the LCD (0: on; 4: off, see FB_BLANK_XXX) */
  	int (*set_power)(struct lcd_device *, int power);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
55
56
57
  	/* Get the current contrast setting (0-max_contrast) */
  	int (*get_contrast)(struct lcd_device *);
  	/* Set LCD panel contrast */
          int (*set_contrast)(struct lcd_device *, int contrast);
faa312da9   Eric Miao   lcd: allow lcd de...
58
59
  	/* Set LCD panel mode (resolutions ...) */
  	int (*set_mode)(struct lcd_device *, struct fb_videomode *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
  	/* Check if given framebuffer device is the one LCD is bound to;
  	   return 0 if not, !=0 if it is. If NULL, lcd always matches the fb. */
0c531360e   Ben Dooks   lcd: add lcd_devi...
62
  	int (*check_fb)(struct lcd_device *, struct fb_info *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
65
  };
  
  struct lcd_device {
599a52d12   Richard Purdie   backlight: Separa...
66
67
  	struct lcd_properties props;
  	/* This protects the 'ops' field. If 'ops' is NULL, the driver that
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
  	   registered this device has been unloaded, and if class_get_devdata()
  	   points to something in the body of that driver, it is also invalid. */
599a52d12   Richard Purdie   backlight: Separa...
70
  	struct mutex ops_lock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
71
  	/* If this is NULL, the backing module is unloaded */
599a52d12   Richard Purdie   backlight: Separa...
72
  	struct lcd_ops *ops;
28ee086d5   Richard Purdie   backlight: Fix ex...
73
74
  	/* Serialise access to set_power method */
  	struct mutex update_lock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
75
76
  	/* The framebuffer notifier block */
  	struct notifier_block fb_notif;
655bfd7ae   Richard Purdie   backlight: Conver...
77
78
  
  	struct device dev;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
79
  };
ee378a5c6   InKi Dae   backlight: add S6...
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  struct lcd_platform_data {
  	/* reset lcd panel device. */
  	int (*reset)(struct lcd_device *ld);
  	/* on or off to lcd panel. if 'enable' is 0 then
  	   lcd power off and 1, lcd power on. */
  	int (*power_on)(struct lcd_device *ld, int enable);
  
  	/* it indicates whether lcd panel was enabled
  	   from bootloader or not. */
  	int lcd_enabled;
  	/* it means delay for stable time when it becomes low to high
  	   or high to low that is dependent on whether reset gpio is
  	   low active or high active. */
  	unsigned int reset_delay;
  	/* stable time needing to become lcd power on. */
  	unsigned int power_on_delay;
  	/* stable time needing to become lcd power off. */
  	unsigned int power_off_delay;
  
  	/* it could be used for any purpose. */
  	void *pdata;
  };
28ee086d5   Richard Purdie   backlight: Fix ex...
102
103
104
  static inline void lcd_set_power(struct lcd_device *ld, int power)
  {
  	mutex_lock(&ld->update_lock);
599a52d12   Richard Purdie   backlight: Separa...
105
106
  	if (ld->ops && ld->ops->set_power)
  		ld->ops->set_power(ld, power);
28ee086d5   Richard Purdie   backlight: Fix ex...
107
108
  	mutex_unlock(&ld->update_lock);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109
  extern struct lcd_device *lcd_device_register(const char *name,
655bfd7ae   Richard Purdie   backlight: Conver...
110
  	struct device *parent, void *devdata, struct lcd_ops *ops);
1d0c48e66   Jingoo Han   lcd: add devm_lcd...
111
112
113
  extern struct lcd_device *devm_lcd_device_register(struct device *dev,
  	const char *name, struct device *parent,
  	void *devdata, struct lcd_ops *ops);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
114
  extern void lcd_device_unregister(struct lcd_device *ld);
1d0c48e66   Jingoo Han   lcd: add devm_lcd...
115
116
  extern void devm_lcd_device_unregister(struct device *dev,
  	struct lcd_device *ld);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
117

655bfd7ae   Richard Purdie   backlight: Conver...
118
119
120
121
122
123
  #define to_lcd_device(obj) container_of(obj, struct lcd_device, dev)
  
  static inline void * lcd_get_data(struct lcd_device *ld_dev)
  {
  	return dev_get_drvdata(&ld_dev->dev);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
125
  
  #endif