Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92
LP55231和LP5523两颗IC是兼容的。
LP55231是TI公司发布的,LP5523是原来的Nation公司发布的.
对应的驱动是leds-lp5523.c
,但是3.10.92内核对应驱动并不兼容dts,没有给出解析dts中platform data的接口。
因此两种方法可以解决此问题:
1. 添加解析dts接口解析platform data.
2. 直接在driver中添加platform data
简单起见,我直接选择了第二种方法了,以下是改动:
diff --git a/drivers/leds/leds-lp5523.c b/drivers/leds/leds-lp5523.c
index 229f734..cd39611 100644
--- a/drivers/leds/leds-lp5523.c
+++ b/drivers/leds/leds-lp5523.c
@@ -423,13 +423,114 @@ static struct lp55xx_device_config lp5523_cfg = {
.dev_attr_group = &lp5523_group,
};
+/*Kris, 180404, add platform data. {*/
+static struct lp55xx_led_config lp5523_led_config[] = {
+ {
+ .name = "D1",
+ .chan_nr = 0,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D2",
+ .chan_nr = 1,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D2",
+ .chan_nr = 1,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D3",
+ .chan_nr = 2,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D4",
+ .chan_nr = 3,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D5",
+ .chan_nr = 4,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D6",
+ .chan_nr = 5,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D7",
+ .chan_nr = 6,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D8",
+ .chan_nr = 7,
+ .led_current = 50,
+ .max_current = 130,
+ },
+ {
+ .name = "D9",
+ .chan_nr = 8,
+ .led_current = 50,
+ .max_current = 130,
+ }
+};
+
+#if 0
+static int lp5523_setup(void)
+{
+ /* Setup HW resources */
+}
+
+static void lp5523_release(void)
+{
+ /* Release HW resources */
+}
+
+static void lp5523_enable(bool state)
+{
+ /* Control chip enable signal */
+}
+#endif
+
+static struct lp55xx_platform_data lp5523_platform_data = {
+ .led_config = lp5523_led_config,
+ .num_channels = ARRAY_SIZE(lp5523_led_config),
+ .clock_mode = LP55XX_CLOCK_INT,
+#if 0
+ .setup_resources = lp5523_setup,
+ .release_resources = lp5523_release,
+ .enable = lp5523_enable,
+#endif
+};
+/*Kris, 180404, add platform data. }*/
+
+
static int lp5523_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
int ret;
struct lp55xx_chip *chip;
struct lp55xx_led *led;
+
+/*Kris, 180404, add platform data. {*/
+#if 0
struct lp55xx_platform_data *pdata = client->dev.platform_data;
+#else
+ struct lp55xx_platform_data *pdata = &lp5523_platform_data;
+#endif
+/*Kris, 180404, add platform data. }*/
if (!pdata) {
dev_err(&client->dev, "no platform data\n");
其中注释掉的#if 0部分可以自行根据需要添加实现。
参考:
LP55231 硬件软件问题请教