• Home
  • Raw
  • Download

Lines Matching +full:led +full:- +full:0

2  * leds-max8997.c - LED class driver for MAX8997 LEDs.
18 #include <linux/mfd/max8997-private.h>
22 #define MAX8997_LED_FLASH_CUR_MASK 0xf8
24 #define MAX8997_LED_MOVIE_CUR_MASK 0xf0
26 #define MAX8997_LED_FLASH_MAX_BRIGHTNESS 0x1f
27 #define MAX8997_LED_MOVIE_MAX_BRIGHTNESS 0xf
28 #define MAX8997_LED_NONE_MAX_BRIGHTNESS 0
30 #define MAX8997_LED0_FLASH_MASK 0x1
31 #define MAX8997_LED0_FLASH_PIN_MASK 0x5
32 #define MAX8997_LED0_MOVIE_MASK 0x8
33 #define MAX8997_LED0_MOVIE_PIN_MASK 0x28
35 #define MAX8997_LED1_FLASH_MASK 0x2
36 #define MAX8997_LED1_FLASH_PIN_MASK 0x6
37 #define MAX8997_LED1_MOVIE_MASK 0x10
38 #define MAX8997_LED1_MOVIE_PIN_MASK 0x30
51 static void max8997_led_set_mode(struct max8997_led *led, in max8997_led_set_mode() argument
55 struct i2c_client *client = led->iodev->i2c; in max8997_led_set_mode()
56 u8 mask = 0, val; in max8997_led_set_mode()
61 val = led->id ? in max8997_led_set_mode()
63 led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS; in max8997_led_set_mode()
67 val = led->id ? in max8997_led_set_mode()
69 led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS; in max8997_led_set_mode()
74 val = led->id ? in max8997_led_set_mode()
76 led->cdev.max_brightness = MAX8997_LED_FLASH_MAX_BRIGHTNESS; in max8997_led_set_mode()
81 val = led->id ? in max8997_led_set_mode()
83 led->cdev.max_brightness = MAX8997_LED_MOVIE_MAX_BRIGHTNESS; in max8997_led_set_mode()
86 led->cdev.max_brightness = MAX8997_LED_NONE_MAX_BRIGHTNESS; in max8997_led_set_mode()
94 dev_err(led->iodev->dev, in max8997_led_set_mode()
98 led->led_mode = mode; in max8997_led_set_mode()
101 static void max8997_led_enable(struct max8997_led *led, bool enable) in max8997_led_enable() argument
104 struct i2c_client *client = led->iodev->i2c; in max8997_led_enable()
105 u8 val = 0, mask = MAX8997_LED_BOOST_ENABLE_MASK; in max8997_led_enable()
107 if (led->enabled == enable) in max8997_led_enable()
110 val = enable ? MAX8997_LED_BOOST_ENABLE_MASK : 0; in max8997_led_enable()
114 dev_err(led->iodev->dev, in max8997_led_enable()
117 led->enabled = enable; in max8997_led_enable()
120 static void max8997_led_set_current(struct max8997_led *led, in max8997_led_set_current() argument
124 struct i2c_client *client = led->iodev->i2c; in max8997_led_set_current()
125 u8 val = 0, mask = 0, reg = 0; in max8997_led_set_current()
127 switch (led->led_mode) { in max8997_led_set_current()
132 reg = led->id ? MAX8997_REG_FLASH2_CUR : MAX8997_REG_FLASH1_CUR; in max8997_led_set_current()
147 dev_err(led->iodev->dev, in max8997_led_set_current()
155 struct max8997_led *led = in max8997_led_brightness_set() local
159 max8997_led_set_current(led, value); in max8997_led_brightness_set()
160 max8997_led_enable(led, true); in max8997_led_brightness_set()
162 max8997_led_set_current(led, value); in max8997_led_brightness_set()
163 max8997_led_enable(led, false); in max8997_led_brightness_set()
171 struct max8997_led *led = in max8997_led_show_mode() local
173 ssize_t ret = 0; in max8997_led_show_mode()
175 mutex_lock(&led->mutex); in max8997_led_show_mode()
177 switch (led->led_mode) { in max8997_led_show_mode()
195 mutex_unlock(&led->mutex); in max8997_led_show_mode()
205 struct max8997_led *led = in max8997_led_store_mode() local
209 mutex_lock(&led->mutex); in max8997_led_store_mode()
222 max8997_led_set_mode(led, mode); in max8997_led_store_mode()
224 mutex_unlock(&led->mutex); in max8997_led_store_mode()
239 struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent); in max8997_led_probe()
240 struct max8997_platform_data *pdata = dev_get_platdata(iodev->dev); in max8997_led_probe()
241 struct max8997_led *led; in max8997_led_probe() local
243 int ret = 0; in max8997_led_probe()
246 dev_err(&pdev->dev, "no platform data\n"); in max8997_led_probe()
247 return -ENODEV; in max8997_led_probe()
250 led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL); in max8997_led_probe()
251 if (led == NULL) in max8997_led_probe()
252 return -ENOMEM; in max8997_led_probe()
254 led->id = pdev->id; in max8997_led_probe()
255 snprintf(name, sizeof(name), "max8997-led%d", pdev->id); in max8997_led_probe()
257 led->cdev.name = name; in max8997_led_probe()
258 led->cdev.brightness_set = max8997_led_brightness_set; in max8997_led_probe()
259 led->cdev.flags |= LED_CORE_SUSPENDRESUME; in max8997_led_probe()
260 led->cdev.brightness = 0; in max8997_led_probe()
261 led->cdev.groups = max8997_groups; in max8997_led_probe()
262 led->iodev = iodev; in max8997_led_probe()
265 if (pdata->led_pdata) { in max8997_led_probe()
266 u8 mode = 0, brightness = 0; in max8997_led_probe()
268 mode = pdata->led_pdata->mode[led->id]; in max8997_led_probe()
269 brightness = pdata->led_pdata->brightness[led->id]; in max8997_led_probe()
271 max8997_led_set_mode(led, mode); in max8997_led_probe()
273 if (brightness > led->cdev.max_brightness) in max8997_led_probe()
274 brightness = led->cdev.max_brightness; in max8997_led_probe()
275 max8997_led_set_current(led, brightness); in max8997_led_probe()
276 led->cdev.brightness = brightness; in max8997_led_probe()
278 max8997_led_set_mode(led, MAX8997_NONE); in max8997_led_probe()
279 max8997_led_set_current(led, 0); in max8997_led_probe()
282 mutex_init(&led->mutex); in max8997_led_probe()
284 ret = devm_led_classdev_register(&pdev->dev, &led->cdev); in max8997_led_probe()
285 if (ret < 0) in max8997_led_probe()
288 return 0; in max8997_led_probe()
293 .name = "max8997-led",
301 MODULE_DESCRIPTION("MAX8997 LED driver");
303 MODULE_ALIAS("platform:max8997-led");