xref: /openbmc/linux/drivers/leds/leds-lp55xx-common.h (revision 6ce6176263393dd80b9a537c1e1462b8529f240b)
1c93d08faSMilo(Woogyom) Kim /*
2c93d08faSMilo(Woogyom) Kim  * LP55XX Common Driver Header
3c93d08faSMilo(Woogyom) Kim  *
4c93d08faSMilo(Woogyom) Kim  * Copyright (C) 2012 Texas Instruments
5c93d08faSMilo(Woogyom) Kim  *
6c93d08faSMilo(Woogyom) Kim  * Author: Milo(Woogyom) Kim <milo.kim@ti.com>
7c93d08faSMilo(Woogyom) Kim  *
8c93d08faSMilo(Woogyom) Kim  * This program is free software; you can redistribute it and/or
9c93d08faSMilo(Woogyom) Kim  * modify it under the terms of the GNU General Public License
10c93d08faSMilo(Woogyom) Kim  * version 2 as published by the Free Software Foundation.
11c93d08faSMilo(Woogyom) Kim  *
12c93d08faSMilo(Woogyom) Kim  * Derived from leds-lp5521.c, leds-lp5523.c
13c93d08faSMilo(Woogyom) Kim  */
14c93d08faSMilo(Woogyom) Kim 
15c93d08faSMilo(Woogyom) Kim #ifndef _LEDS_LP55XX_COMMON_H
16c93d08faSMilo(Woogyom) Kim #define _LEDS_LP55XX_COMMON_H
17c93d08faSMilo(Woogyom) Kim 
18c93d08faSMilo(Woogyom) Kim struct lp55xx_led;
19c93d08faSMilo(Woogyom) Kim struct lp55xx_chip;
20c93d08faSMilo(Woogyom) Kim 
21c93d08faSMilo(Woogyom) Kim /*
2248068d5dSMilo(Woogyom) Kim  * struct lp55xx_reg
2348068d5dSMilo(Woogyom) Kim  * @addr : Register address
2448068d5dSMilo(Woogyom) Kim  * @val  : Register value
2548068d5dSMilo(Woogyom) Kim  */
2648068d5dSMilo(Woogyom) Kim struct lp55xx_reg {
2748068d5dSMilo(Woogyom) Kim 	u8 addr;
2848068d5dSMilo(Woogyom) Kim 	u8 val;
2948068d5dSMilo(Woogyom) Kim };
3048068d5dSMilo(Woogyom) Kim 
3148068d5dSMilo(Woogyom) Kim /*
3248068d5dSMilo(Woogyom) Kim  * struct lp55xx_device_config
3348068d5dSMilo(Woogyom) Kim  * @reset              : Chip specific reset command
34e3a700d8SMilo(Woogyom) Kim  * @enable             : Chip specific enable command
35ffbdccdbSMilo(Woogyom) Kim  * @post_init_device   : Chip specific initialization code
3648068d5dSMilo(Woogyom) Kim  */
3748068d5dSMilo(Woogyom) Kim struct lp55xx_device_config {
3848068d5dSMilo(Woogyom) Kim 	const struct lp55xx_reg reset;
39e3a700d8SMilo(Woogyom) Kim 	const struct lp55xx_reg enable;
40ffbdccdbSMilo(Woogyom) Kim 
41ffbdccdbSMilo(Woogyom) Kim 	/* define if the device has specific initialization process */
42ffbdccdbSMilo(Woogyom) Kim 	int (*post_init_device) (struct lp55xx_chip *chip);
4348068d5dSMilo(Woogyom) Kim };
4448068d5dSMilo(Woogyom) Kim 
4548068d5dSMilo(Woogyom) Kim /*
46c93d08faSMilo(Woogyom) Kim  * struct lp55xx_chip
47c93d08faSMilo(Woogyom) Kim  * @cl         : I2C communication for access registers
48c93d08faSMilo(Woogyom) Kim  * @pdata      : Platform specific data
49c93d08faSMilo(Woogyom) Kim  * @lock       : Lock for user-space interface
50c93d08faSMilo(Woogyom) Kim  * @num_leds   : Number of registered LEDs
5148068d5dSMilo(Woogyom) Kim  * @cfg        : Device specific configuration data
52c93d08faSMilo(Woogyom) Kim  */
53c93d08faSMilo(Woogyom) Kim struct lp55xx_chip {
54c93d08faSMilo(Woogyom) Kim 	struct i2c_client *cl;
55c93d08faSMilo(Woogyom) Kim 	struct lp55xx_platform_data *pdata;
56c93d08faSMilo(Woogyom) Kim 	struct mutex lock;	/* lock for user-space interface */
57c93d08faSMilo(Woogyom) Kim 	int num_leds;
5848068d5dSMilo(Woogyom) Kim 	struct lp55xx_device_config *cfg;
59c93d08faSMilo(Woogyom) Kim };
60c93d08faSMilo(Woogyom) Kim 
61c93d08faSMilo(Woogyom) Kim /*
62c93d08faSMilo(Woogyom) Kim  * struct lp55xx_led
63c93d08faSMilo(Woogyom) Kim  * @chan_nr         : Channel number
64c93d08faSMilo(Woogyom) Kim  * @cdev            : LED class device
65c93d08faSMilo(Woogyom) Kim  * @led_current     : Current setting at each led channel
66c93d08faSMilo(Woogyom) Kim  * @max_current     : Maximun current at each led channel
67c93d08faSMilo(Woogyom) Kim  * @brightness_work : Workqueue for brightness control
68c93d08faSMilo(Woogyom) Kim  * @brightness      : Brightness value
69c93d08faSMilo(Woogyom) Kim  * @chip            : The lp55xx chip data
70c93d08faSMilo(Woogyom) Kim  */
71c93d08faSMilo(Woogyom) Kim struct lp55xx_led {
72c93d08faSMilo(Woogyom) Kim 	int chan_nr;
73c93d08faSMilo(Woogyom) Kim 	struct led_classdev cdev;
74c93d08faSMilo(Woogyom) Kim 	u8 led_current;
75c93d08faSMilo(Woogyom) Kim 	u8 max_current;
76c93d08faSMilo(Woogyom) Kim 	struct work_struct brightness_work;
77c93d08faSMilo(Woogyom) Kim 	u8 brightness;
78c93d08faSMilo(Woogyom) Kim 	struct lp55xx_chip *chip;
79c93d08faSMilo(Woogyom) Kim };
80c93d08faSMilo(Woogyom) Kim 
81c93d08faSMilo(Woogyom) Kim /* register access */
82c93d08faSMilo(Woogyom) Kim extern int lp55xx_write(struct lp55xx_chip *chip, u8 reg, u8 val);
83c93d08faSMilo(Woogyom) Kim extern int lp55xx_read(struct lp55xx_chip *chip, u8 reg, u8 *val);
84c93d08faSMilo(Woogyom) Kim extern int lp55xx_update_bits(struct lp55xx_chip *chip, u8 reg,
85c93d08faSMilo(Woogyom) Kim 			u8 mask, u8 val);
86c93d08faSMilo(Woogyom) Kim 
87*6ce61762SMilo(Woogyom) Kim /* common device init/deinit functions */
88a85908ddSMilo(Woogyom) Kim extern int lp55xx_init_device(struct lp55xx_chip *chip);
89*6ce61762SMilo(Woogyom) Kim extern void lp55xx_deinit_device(struct lp55xx_chip *chip);
90a85908ddSMilo(Woogyom) Kim 
91c93d08faSMilo(Woogyom) Kim #endif /* _LEDS_LP55XX_COMMON_H */
92