Root/
1 | /* |
2 | * LP55XX Common Driver Header |
3 | * |
4 | * Copyright (C) 2012 Texas Instruments |
5 | * |
6 | * Author: Milo(Woogyom) Kim <milo.kim@ti.com> |
7 | * |
8 | * This program is free software; you can redistribute it and/or |
9 | * modify it under the terms of the GNU General Public License |
10 | * version 2 as published by the Free Software Foundation. |
11 | * |
12 | * Derived from leds-lp5521.c, leds-lp5523.c |
13 | */ |
14 | |
15 | #ifndef _LEDS_LP55XX_COMMON_H |
16 | #define _LEDS_LP55XX_COMMON_H |
17 | |
18 | enum lp55xx_engine_index { |
19 | LP55XX_ENGINE_INVALID, |
20 | LP55XX_ENGINE_1, |
21 | LP55XX_ENGINE_2, |
22 | LP55XX_ENGINE_3, |
23 | }; |
24 | |
25 | struct lp55xx_led; |
26 | struct lp55xx_chip; |
27 | |
28 | /* |
29 | * struct lp55xx_reg |
30 | * @addr : Register address |
31 | * @val : Register value |
32 | */ |
33 | struct lp55xx_reg { |
34 | u8 addr; |
35 | u8 val; |
36 | }; |
37 | |
38 | /* |
39 | * struct lp55xx_device_config |
40 | * @reset : Chip specific reset command |
41 | * @enable : Chip specific enable command |
42 | * @max_channel : Maximum number of channels |
43 | * @post_init_device : Chip specific initialization code |
44 | * @brightness_work_fn : Brightness work function |
45 | * @set_led_current : LED current set function |
46 | * @firmware_cb : Call function when the firmware is loaded |
47 | * @run_engine : Run internal engine for pattern |
48 | * @dev_attr_group : Device specific attributes |
49 | */ |
50 | struct lp55xx_device_config { |
51 | const struct lp55xx_reg reset; |
52 | const struct lp55xx_reg enable; |
53 | const int max_channel; |
54 | |
55 | /* define if the device has specific initialization process */ |
56 | int (*post_init_device) (struct lp55xx_chip *chip); |
57 | |
58 | /* access brightness register */ |
59 | void (*brightness_work_fn)(struct work_struct *work); |
60 | |
61 | /* current setting function */ |
62 | void (*set_led_current) (struct lp55xx_led *led, u8 led_current); |
63 | |
64 | /* access program memory when the firmware is loaded */ |
65 | void (*firmware_cb)(struct lp55xx_chip *chip); |
66 | |
67 | /* used for running firmware LED patterns */ |
68 | void (*run_engine) (struct lp55xx_chip *chip, bool start); |
69 | |
70 | /* additional device specific attributes */ |
71 | const struct attribute_group *dev_attr_group; |
72 | }; |
73 | |
74 | /* |
75 | * struct lp55xx_chip |
76 | * @cl : I2C communication for access registers |
77 | * @pdata : Platform specific data |
78 | * @lock : Lock for user-space interface |
79 | * @num_leds : Number of registered LEDs |
80 | * @cfg : Device specific configuration data |
81 | * @engine_idx : Selected engine number |
82 | * @fw : Firmware data for running a LED pattern |
83 | */ |
84 | struct lp55xx_chip { |
85 | struct i2c_client *cl; |
86 | struct lp55xx_platform_data *pdata; |
87 | struct mutex lock; /* lock for user-space interface */ |
88 | int num_leds; |
89 | struct lp55xx_device_config *cfg; |
90 | enum lp55xx_engine_index engine_idx; |
91 | const struct firmware *fw; |
92 | }; |
93 | |
94 | /* |
95 | * struct lp55xx_led |
96 | * @chan_nr : Channel number |
97 | * @cdev : LED class device |
98 | * @led_current : Current setting at each led channel |
99 | * @max_current : Maximun current at each led channel |
100 | * @brightness_work : Workqueue for brightness control |
101 | * @brightness : Brightness value |
102 | * @chip : The lp55xx chip data |
103 | */ |
104 | struct lp55xx_led { |
105 | int chan_nr; |
106 | struct led_classdev cdev; |
107 | u8 led_current; |
108 | u8 max_current; |
109 | struct work_struct brightness_work; |
110 | u8 brightness; |
111 | struct lp55xx_chip *chip; |
112 | }; |
113 | |
114 | /* register access */ |
115 | extern int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val); |
116 | extern int lp55xx_read(struct lp55xx_chip *chip, u8 reg, u8 *val); |
117 | extern int lp55xx_update_bits(struct lp55xx_chip *chip, u8 reg, |
118 | u8 mask, u8 val); |
119 | |
120 | /* common device init/deinit functions */ |
121 | extern int lp55xx_init_device(struct lp55xx_chip *chip); |
122 | extern void lp55xx_deinit_device(struct lp55xx_chip *chip); |
123 | |
124 | /* common LED class device functions */ |
125 | extern int lp55xx_register_leds(struct lp55xx_led *led, |
126 | struct lp55xx_chip *chip); |
127 | extern void lp55xx_unregister_leds(struct lp55xx_led *led, |
128 | struct lp55xx_chip *chip); |
129 | |
130 | /* common device attributes functions */ |
131 | extern int lp55xx_register_sysfs(struct lp55xx_chip *chip); |
132 | extern void lp55xx_unregister_sysfs(struct lp55xx_chip *chip); |
133 | |
134 | #endif /* _LEDS_LP55XX_COMMON_H */ |
135 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9