[RK3288][Android6.0] 调试笔记 --- LP55231驱动验证

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 硬件软件问题请教

猜你喜欢

转载自blog.csdn.net/kris_fei/article/details/79865226
今日推荐