xref: /openbmc/linux/drivers/leds/leds-lp55xx-common.h (revision c93d08fa75020835741c7b1d0523ff854e8acde1)
1*c93d08faSMilo(Woogyom) Kim /*
2*c93d08faSMilo(Woogyom) Kim  * LP55XX Common Driver Header
3*c93d08faSMilo(Woogyom) Kim  *
4*c93d08faSMilo(Woogyom) Kim  * Copyright (C) 2012 Texas Instruments
5*c93d08faSMilo(Woogyom) Kim  *
6*c93d08faSMilo(Woogyom) Kim  * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
7*c93d08faSMilo(Woogyom) Kim  *
8*c93d08faSMilo(Woogyom) Kim  * This program is free software; you can redistribute it and/or
9*c93d08faSMilo(Woogyom) Kim  * modify it under the terms of the GNU General Public License
10*c93d08faSMilo(Woogyom) Kim  * version 2 as published by the Free Software Foundation.
11*c93d08faSMilo(Woogyom) Kim  *
12*c93d08faSMilo(Woogyom) Kim  * Derived from leds-lp5521.c, leds-lp5523.c
13*c93d08faSMilo(Woogyom) Kim  */
14*c93d08faSMilo(Woogyom) Kim 
15*c93d08faSMilo(Woogyom) Kim #ifndef _LEDS_LP55XX_COMMON_H
16*c93d08faSMilo(Woogyom) Kim #define _LEDS_LP55XX_COMMON_H
17*c93d08faSMilo(Woogyom) Kim 
18*c93d08faSMilo(Woogyom) Kim struct lp55xx_led;
19*c93d08faSMilo(Woogyom) Kim struct lp55xx_chip;
20*c93d08faSMilo(Woogyom) Kim 
21*c93d08faSMilo(Woogyom) Kim /*
22*c93d08faSMilo(Woogyom) Kim  * struct lp55xx_chip
23*c93d08faSMilo(Woogyom) Kim  * @cl         : I2C communication for access registers
24*c93d08faSMilo(Woogyom) Kim  * @pdata      : Platform specific data
25*c93d08faSMilo(Woogyom) Kim  * @lock       : Lock for user-space interface
26*c93d08faSMilo(Woogyom) Kim  * @num_leds   : Number of registered LEDs
27*c93d08faSMilo(Woogyom) Kim  */
28*c93d08faSMilo(Woogyom) Kim struct lp55xx_chip {
29*c93d08faSMilo(Woogyom) Kim 	struct i2c_client *cl;
30*c93d08faSMilo(Woogyom) Kim 	struct lp55xx_platform_data *pdata;
31*c93d08faSMilo(Woogyom) Kim 	struct mutex lock;	/* lock for user-space interface */
32*c93d08faSMilo(Woogyom) Kim 	int num_leds;
33*c93d08faSMilo(Woogyom) Kim };
34*c93d08faSMilo(Woogyom) Kim 
35*c93d08faSMilo(Woogyom) Kim /*
36*c93d08faSMilo(Woogyom) Kim  * struct lp55xx_led
37*c93d08faSMilo(Woogyom) Kim  * @chan_nr         : Channel number
38*c93d08faSMilo(Woogyom) Kim  * @cdev            : LED class device
39*c93d08faSMilo(Woogyom) Kim  * @led_current     : Current setting at each led channel
40*c93d08faSMilo(Woogyom) Kim  * @max_current     : Maximun current at each led channel
41*c93d08faSMilo(Woogyom) Kim  * @brightness_work : Workqueue for brightness control
42*c93d08faSMilo(Woogyom) Kim  * @brightness      : Brightness value
43*c93d08faSMilo(Woogyom) Kim  * @chip            : The lp55xx chip data
44*c93d08faSMilo(Woogyom) Kim  */
45*c93d08faSMilo(Woogyom) Kim struct lp55xx_led {
46*c93d08faSMilo(Woogyom) Kim 	int chan_nr;
47*c93d08faSMilo(Woogyom) Kim 	struct led_classdev cdev;
48*c93d08faSMilo(Woogyom) Kim 	u8 led_current;
49*c93d08faSMilo(Woogyom) Kim 	u8 max_current;
50*c93d08faSMilo(Woogyom) Kim 	struct work_struct brightness_work;
51*c93d08faSMilo(Woogyom) Kim 	u8 brightness;
52*c93d08faSMilo(Woogyom) Kim 	struct lp55xx_chip *chip;
53*c93d08faSMilo(Woogyom) Kim };
54*c93d08faSMilo(Woogyom) Kim 
55*c93d08faSMilo(Woogyom) Kim /* register access */
56*c93d08faSMilo(Woogyom) Kim extern int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val);
57*c93d08faSMilo(Woogyom) Kim extern int lp55xx_read(struct lp55xx_chip *chip, u8 reg, u8 *val);
58*c93d08faSMilo(Woogyom) Kim extern int lp55xx_update_bits(struct lp55xx_chip *chip, u8 reg,
59*c93d08faSMilo(Woogyom) Kim 			u8 mask, u8 val);
60*c93d08faSMilo(Woogyom) Kim 
61*c93d08faSMilo(Woogyom) Kim #endif /* _LEDS_LP55XX_COMMON_H */
62