leds-lp8860.c (b12ef03a38b20e1bfaa163ed1632625fedd570ee) leds-lp8860.c (c6b218c9c0d686486dcc39a1d80aff90801ca6fc)
1/*
2 * TI LP8860 4-Channel LED Driver
3 *
4 * Copyright (C) 2014 Texas Instruments
5 *
6 * Author: Dan Murphy <dmurphy@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or

--- 8 unchanged lines hidden (view full) ---

17#include <linux/regmap.h>
18#include <linux/regulator/consumer.h>
19#include <linux/module.h>
20#include <linux/mutex.h>
21#include <linux/of.h>
22#include <linux/of_gpio.h>
23#include <linux/gpio/consumer.h>
24#include <linux/slab.h>
1/*
2 * TI LP8860 4-Channel LED Driver
3 *
4 * Copyright (C) 2014 Texas Instruments
5 *
6 * Author: Dan Murphy <dmurphy@ti.com>
7 *
8 * This program is free software; you can redistribute it and/or

--- 8 unchanged lines hidden (view full) ---

17#include <linux/regmap.h>
18#include <linux/regulator/consumer.h>
19#include <linux/module.h>
20#include <linux/mutex.h>
21#include <linux/of.h>
22#include <linux/of_gpio.h>
23#include <linux/gpio/consumer.h>
24#include <linux/slab.h>
25#include <uapi/linux/uleds.h>
25
26#define LP8860_DISP_CL1_BRT_MSB 0x00
27#define LP8860_DISP_CL1_BRT_LSB 0x01
28#define LP8860_DISP_CL1_CURR_MSB 0x02
29#define LP8860_DISP_CL1_CURR_LSB 0x03
30#define LP8860_CL2_BRT_MSB 0x04
31#define LP8860_CL2_BRT_LSB 0x05
32#define LP8860_CL2_CURRENT 0x06

--- 48 unchanged lines hidden (view full) ---

81#define LP8860_UNLOCK_EEPROM 0x01
82#define LP8860_PROGRAM_EEPROM 0x02
83#define LP8860_EEPROM_CODE_1 0x08
84#define LP8860_EEPROM_CODE_2 0xba
85#define LP8860_EEPROM_CODE_3 0xef
86
87#define LP8860_CLEAR_FAULTS 0x01
88
26
27#define LP8860_DISP_CL1_BRT_MSB 0x00
28#define LP8860_DISP_CL1_BRT_LSB 0x01
29#define LP8860_DISP_CL1_CURR_MSB 0x02
30#define LP8860_DISP_CL1_CURR_LSB 0x03
31#define LP8860_CL2_BRT_MSB 0x04
32#define LP8860_CL2_BRT_LSB 0x05
33#define LP8860_CL2_CURRENT 0x06

--- 48 unchanged lines hidden (view full) ---

82#define LP8860_UNLOCK_EEPROM 0x01
83#define LP8860_PROGRAM_EEPROM 0x02
84#define LP8860_EEPROM_CODE_1 0x08
85#define LP8860_EEPROM_CODE_2 0xba
86#define LP8860_EEPROM_CODE_3 0xef
87
88#define LP8860_CLEAR_FAULTS 0x01
89
89#define LP8860_DISP_LED_NAME "display_cluster"
90
91/**
92 * struct lp8860_led -
93 * @lock - Lock for reading/writing the device
94 * @client - Pointer to the I2C client
95 * @led_dev - led class device pointer
96 * @regmap - Devices register map
97 * @eeprom_regmap - EEPROM register map
98 * @enable_gpio - VDDIO/EN gpio to enable communication interface
99 * @regulator - LED supply regulator pointer
100 * @label - LED label
101 */
102struct lp8860_led {
103 struct mutex lock;
104 struct i2c_client *client;
105 struct led_classdev led_dev;
106 struct regmap *regmap;
107 struct regmap *eeprom_regmap;
108 struct gpio_desc *enable_gpio;
109 struct regulator *regulator;
90/**
91 * struct lp8860_led -
92 * @lock - Lock for reading/writing the device
93 * @client - Pointer to the I2C client
94 * @led_dev - led class device pointer
95 * @regmap - Devices register map
96 * @eeprom_regmap - EEPROM register map
97 * @enable_gpio - VDDIO/EN gpio to enable communication interface
98 * @regulator - LED supply regulator pointer
99 * @label - LED label
100 */
101struct lp8860_led {
102 struct mutex lock;
103 struct i2c_client *client;
104 struct led_classdev led_dev;
105 struct regmap *regmap;
106 struct regmap *eeprom_regmap;
107 struct gpio_desc *enable_gpio;
108 struct regulator *regulator;
110 const char *label;
109 char label[LED_MAX_NAME_SIZE];
111};
112
113struct lp8860_eeprom_reg {
114 uint8_t reg;
115 uint8_t value;
116};
117
118static struct lp8860_eeprom_reg lp8860_eeprom_disp_regs[] = {

--- 263 unchanged lines hidden (view full) ---

382};
383
384static int lp8860_probe(struct i2c_client *client,
385 const struct i2c_device_id *id)
386{
387 int ret;
388 struct lp8860_led *led;
389 struct device_node *np = client->dev.of_node;
110};
111
112struct lp8860_eeprom_reg {
113 uint8_t reg;
114 uint8_t value;
115};
116
117static struct lp8860_eeprom_reg lp8860_eeprom_disp_regs[] = {

--- 263 unchanged lines hidden (view full) ---

381};
382
383static int lp8860_probe(struct i2c_client *client,
384 const struct i2c_device_id *id)
385{
386 int ret;
387 struct lp8860_led *led;
388 struct device_node *np = client->dev.of_node;
389 struct device_node *child_node;
390 const char *name;
390
391 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
392 if (!led)
393 return -ENOMEM;
394
391
392 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
393 if (!led)
394 return -ENOMEM;
395
395 led->label = LP8860_DISP_LED_NAME;
396
397 if (client->dev.of_node) {
398 ret = of_property_read_string(np, "label", &led->label);
399 if (ret) {
400 dev_err(&client->dev, "Missing label in dt\n");
401 return -EINVAL;
402 }
396 for_each_available_child_of_node(np, child_node) {
397 ret = of_property_read_string(child_node, "label", &name);
398 if (!ret)
399 snprintf(led->label, sizeof(led->label), "%s:%s",
400 id->name, name);
401 else
402 snprintf(led->label, sizeof(led->label),
403 "%s::display_cluster", id->name);
403 }
404
405 led->enable_gpio = devm_gpiod_get_optional(&client->dev,
406 "enable", GPIOD_OUT_LOW);
407 if (IS_ERR(led->enable_gpio)) {
408 ret = PTR_ERR(led->enable_gpio);
409 dev_err(&client->dev, "Failed to get enable gpio: %d\n", ret);
410 return ret;

--- 92 unchanged lines hidden ---
404 }
405
406 led->enable_gpio = devm_gpiod_get_optional(&client->dev,
407 "enable", GPIOD_OUT_LOW);
408 if (IS_ERR(led->enable_gpio)) {
409 ret = PTR_ERR(led->enable_gpio);
410 dev_err(&client->dev, "Failed to get enable gpio: %d\n", ret);
411 return ret;

--- 92 unchanged lines hidden ---