From 673a1c4b5ba6dfd97cfe21ab284d89f8ab4e79c1 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Fri, 9 Dec 2011 15:14:24 +0200 Subject: [PATCH] HACK: gfx: display: add display I2C device The display I2C device (bus 2, addr 0x60) is not present in firmware. Workaround by creating the device by ourselves. Signed-off-by: Jani Nikula Signed-off-by: Kirill A. Shutemov --- drivers/staging/mrst/drv/tc35876x-dsi-lvds.c | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c index 69e4354..6b332f3 100644 --- a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c +++ b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c @@ -602,12 +602,46 @@ static struct i2c_driver cmi_lcd_i2c_driver = { .remove = __devexit_p(cmi_lcd_i2c_remove), }; +/* HACK to create I2C device while it's not created by platform code */ +#define CMI_LCD_I2C_ADAPTER 2 +#define CMI_LCD_I2C_ADDR 0x60 + +static int cmi_lcd_hack_create_device(void) +{ + struct i2c_adapter *adapter; + struct i2c_client *client; + struct i2c_board_info info = { + .type = "cmi-lcd", + .addr = CMI_LCD_I2C_ADDR, + }; + + pr_debug("%s\n", __func__); + + adapter = i2c_get_adapter(CMI_LCD_I2C_ADAPTER); + if (!adapter) { + pr_err("%s: i2c_get_adapter(%d) failed\n", __func__, + CMI_LCD_I2C_ADAPTER); + return -EINVAL; + } + + client = i2c_new_device(adapter, &info); + if (!client) { + pr_err("%s: i2c_new_device() failed\n", __func__); + i2c_put_adapter(adapter); + return -EINVAL; + } + + return 0; +} + int tc35876x_bridge_init(void) { int r; pr_debug("%s\n", __func__); + cmi_lcd_hack_create_device(); + r = i2c_add_driver(&cmi_lcd_i2c_driver); if (r < 0) pr_err("%s: i2c_add_driver() for %s failed (%d)\n", -- 2.7.4