From de51efe7cd2fcda6a9aa7f0be0482d2578155c09 Mon Sep 17 00:00:00 2001 From: kfx Date: Thu, 11 Aug 2011 10:22:43 +0800 Subject: [PATCH] update hdmi drivers: mod gpio control for phonepad project --- arch/arm/mach-rk29/board-rk29-a22.c | 12 ++++++++++++ arch/arm/mach-rk29/board-rk29-ddr3sdk.c | 12 +++++++++++- arch/arm/mach-rk29/board-rk29-phonesdk.c | 16 ++++++++++++++++ arch/arm/mach-rk29/board-rk29sdk.c | 13 +++++++++++-- arch/arm/mach-rk29/include/mach/board.h | 6 ++++++ drivers/video/hdmi/chips/anx7150.c | 11 +++++------ drivers/video/hdmi/chips/anx7150.h | 2 -- 7 files changed, 61 insertions(+), 11 deletions(-) diff --git a/arch/arm/mach-rk29/board-rk29-a22.c b/arch/arm/mach-rk29/board-rk29-a22.c index b02d84d3f70a..f755656c009b 100644 --- a/arch/arm/mach-rk29/board-rk29-a22.c +++ b/arch/arm/mach-rk29/board-rk29-a22.c @@ -1739,6 +1739,17 @@ struct i2c_gpio_platform_data default_i2c3_data = { .io_init = rk29_i2c3_io_init, }; #endif +#if defined (CONFIG_ANX7150) +#define HDMI_VDD_CTL RK29_PIN6_PD3 +int anx7150_io_init(void) +{ + return 0; +} +struct hdmi_platform_data anx7150_data = { + .io_init = anx7150_io_init, +}; +#endif + #ifdef CONFIG_I2C0_RK29 static struct i2c_board_info __initdata board_i2c0_devices[] = { #if defined (CONFIG_RK1000_CONTROL) @@ -1850,6 +1861,7 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = { .addr = 0x39, //0x39, 0x3d .flags = 0, .irq = RK29_PIN2_PA3, + .platform_data = &anx7150_data, }, #endif #if defined (CONFIG_SENSORS_MPU3050) diff --git a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c index f4e883fa9fee..55c5030385e3 100755 --- a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c +++ b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c @@ -789,6 +789,15 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = { #endif }; #endif +#if defined (CONFIG_ANX7150) +int anx7150_io_init(void) +{ + return 0; +} +struct hdmi_platform_data anx7150_data = { + .io_init = anx7150_io_init, +}; +#endif #ifdef CONFIG_I2C1_RK29 static struct i2c_board_info __initdata board_i2c1_devices[] = { @@ -799,12 +808,13 @@ static struct i2c_board_info __initdata board_i2c1_devices[] = { .flags = 0, }, #endif -#if defined (CONFIG_ANX7150) || defined (CONFIG_ANX7150_NEW) +#if defined (CONFIG_ANX7150) { .type = "anx7150", .addr = 0x39, //0x39, 0x3d .flags = 0, .irq = RK29_PIN1_PD7, + .platform_data = &anx7150_data, }, #endif diff --git a/arch/arm/mach-rk29/board-rk29-phonesdk.c b/arch/arm/mach-rk29/board-rk29-phonesdk.c index d1580c9b9eea..faf7893c57a8 100755 --- a/arch/arm/mach-rk29/board-rk29-phonesdk.c +++ b/arch/arm/mach-rk29/board-rk29-phonesdk.c @@ -1796,6 +1796,21 @@ struct i2c_gpio_platform_data default_i2c3_data = { .io_init = rk29_i2c3_io_init, }; #endif + +#if defined (CONFIG_ANX7150) +#define HDMI_VDD_CTL RK29_PIN6_PD3 +int anx7150_io_init(void) +{ + gpio_request(HDMI_VDD_CTL, "hdmi pwr ctl"); + gpio_direction_output(HDMI_VDD_CTL, GPIO_HIGH); + //gpio_set_value(HDMI_VDD_CTL, GPIO_HIGH); + mdelay(10); + return 0; +} +struct hdmi_platform_data anx7150_data = { + .io_init = anx7150_io_init, +}; +#endif #ifdef CONFIG_I2C0_RK29 static struct i2c_board_info __initdata board_i2c0_devices[] = { #if defined (CONFIG_RK1000_CONTROL) @@ -1890,6 +1905,7 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = { .addr = 0x39, //0x39, 0x3d .flags = 0, .irq = RK29_PIN2_PA3, + .platform_data = &anx7150_data, }, #endif #if defined (CONFIG_GS_L3G4200D) diff --git a/arch/arm/mach-rk29/board-rk29sdk.c b/arch/arm/mach-rk29/board-rk29sdk.c index 064441f203b5..6c0865d40a3c 100755 --- a/arch/arm/mach-rk29/board-rk29sdk.c +++ b/arch/arm/mach-rk29/board-rk29sdk.c @@ -795,7 +795,15 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = { #endif }; #endif - +#if defined (CONFIG_ANX7150) +int anx7150_io_init(void) +{ + return 0; +} +struct hdmi_platform_data anx7150_data = { + .io_init = anx7150_io_init, +}; +#endif #ifdef CONFIG_I2C1_RK29 static struct i2c_board_info __initdata board_i2c1_devices[] = { #if defined (CONFIG_RK1000_CONTROL1) @@ -805,12 +813,13 @@ static struct i2c_board_info __initdata board_i2c1_devices[] = { .flags = 0, }, #endif -#if defined (CONFIG_ANX7150) || defined (CONFIG_ANX7150_NEW) +#if defined (CONFIG_ANX7150) { .type = "anx7150", .addr = 0x39, //0x39, 0x3d .flags = 0, .irq = RK29_PIN1_PD7, + .platform_data = &anx7150_data, }, #endif diff --git a/arch/arm/mach-rk29/include/mach/board.h b/arch/arm/mach-rk29/include/mach/board.h index 7c7f811cec88..a9a72b23e842 100644 --- a/arch/arm/mach-rk29/include/mach/board.h +++ b/arch/arm/mach-rk29/include/mach/board.h @@ -38,6 +38,12 @@ struct led_newton_pwm_platform_data { struct led_newton_pwm* leds; }; +struct hdmi_platform_data { + u32 hdmi_on_pin; + u32 hdmi_on_level; + int (*io_init)(void); + int (*io_deinit)(void); +}; struct irda_info{ u32 intr_pin; int (*iomux_init)(void); diff --git a/drivers/video/hdmi/chips/anx7150.c b/drivers/video/hdmi/chips/anx7150.c index 74949e968b10..e1a479b1fe20 100755 --- a/drivers/video/hdmi/chips/anx7150.c +++ b/drivers/video/hdmi/chips/anx7150.c @@ -7,6 +7,7 @@ #include #include #include +#include @@ -159,12 +160,10 @@ static int anx7150_i2c_probe(struct i2c_client *client,const struct i2c_device_i struct hdmi *hdmi = NULL; struct anx7150_pdata *anx = NULL; -#if defined(CONFIG_MACH_RK29_PHONEPADSDK) - gpio_request(HDMI_VDD_CTL, "hdmi pwr ctl"); - gpio_direction_output(HDMI_VDD_CTL, GPIO_HIGH); - //gpio_set_value(HDMI_VDD_CTL, GPIO_HIGH); - mdelay(10); -#endif + struct hdmi_platform_data *pdata = client->dev.platform_data; + + if(pdata && pdata->io_init) + pdata->io_init(); hdmi = hdmi_register(sizeof(struct anx7150_pdata), &client->dev); if (!hdmi) diff --git a/drivers/video/hdmi/chips/anx7150.h b/drivers/video/hdmi/chips/anx7150.h index b1db5ae520bc..b9c5ee329e2a 100755 --- a/drivers/video/hdmi/chips/anx7150.h +++ b/drivers/video/hdmi/chips/anx7150.h @@ -10,8 +10,6 @@ #define ANX7150_SCL_RATE 100 * 1000 -/* VCC_HDMI 's control */ -#define HDMI_VDD_CTL RK29_PIN6_PD3 /* HDMI auto switch */ #define HDMI_AUTO_SWITCH HDMI_ENABLE -- 2.34.1