ARM i.MX27 Visstrim M10: fix gpio handling.

Some GPIOs in Visstrim M10 are used without being registered.
This leads to USB and video malfunctions. This patch registers
those GPIOs to solve the issue.

Signed-off-by: Javier Martin <javier.martin@vista-silicon.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Javier Martin 2012-06-01 09:45:33 +02:00 committed by Sascha Hauer
parent f90da3c7a5
commit 18847b42f8

View File

@ -107,6 +107,8 @@ static const int visstrim_m10_pins[] __initconst = {
PB23_PF_USB_PWR, PB23_PF_USB_PWR,
PB24_PF_USB_OC, PB24_PF_USB_OC,
/* CSI */ /* CSI */
TVP5150_RSTN | GPIO_GPIO | GPIO_OUT,
TVP5150_PWDN | GPIO_GPIO | GPIO_OUT,
PB10_PF_CSI_D0, PB10_PF_CSI_D0,
PB11_PF_CSI_D1, PB11_PF_CSI_D1,
PB12_PF_CSI_D2, PB12_PF_CSI_D2,
@ -121,6 +123,24 @@ static const int visstrim_m10_pins[] __initconst = {
PB21_PF_CSI_HSYNC, PB21_PF_CSI_HSYNC,
}; };
static const struct gpio visstrim_m10_gpios[] __initconst = {
{
.gpio = TVP5150_RSTN,
.flags = GPIOF_DIR_OUT | GPIOF_INIT_HIGH,
.label = "tvp5150_rstn",
},
{
.gpio = TVP5150_PWDN,
.flags = GPIOF_DIR_OUT | GPIOF_INIT_LOW,
.label = "tvp5150_pwdn",
},
{
.gpio = OTG_PHY_CS_GPIO,
.flags = GPIOF_DIR_OUT | GPIOF_INIT_LOW,
.label = "usbotg_cs",
},
};
/* Camera */ /* Camera */
static int visstrim_camera_power(struct device *dev, int on) static int visstrim_camera_power(struct device *dev, int on)
{ {
@ -164,13 +184,6 @@ static void __init visstrim_camera_init(void)
struct platform_device *pdev; struct platform_device *pdev;
int dma; int dma;
/* Initialize tvp5150 gpios */
mxc_gpio_mode(TVP5150_RSTN | GPIO_GPIO | GPIO_OUT);
mxc_gpio_mode(TVP5150_PWDN | GPIO_GPIO | GPIO_OUT);
gpio_set_value(TVP5150_RSTN, 1);
gpio_set_value(TVP5150_PWDN, 0);
ndelay(1);
gpio_set_value(TVP5150_PWDN, 1); gpio_set_value(TVP5150_PWDN, 1);
ndelay(1); ndelay(1);
gpio_set_value(TVP5150_RSTN, 0); gpio_set_value(TVP5150_RSTN, 0);
@ -351,10 +364,6 @@ static struct i2c_board_info visstrim_m10_i2c_devices[] = {
/* USB OTG */ /* USB OTG */
static int otg_phy_init(struct platform_device *pdev) static int otg_phy_init(struct platform_device *pdev)
{ {
gpio_set_value(OTG_PHY_CS_GPIO, 0);
mdelay(10);
return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED); return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED);
} }
@ -380,6 +389,11 @@ static void __init visstrim_m10_board_init(void)
if (ret) if (ret)
pr_err("Failed to setup pins (%d)\n", ret); pr_err("Failed to setup pins (%d)\n", ret);
ret = gpio_request_array(visstrim_m10_gpios,
ARRAY_SIZE(visstrim_m10_gpios));
if (ret)
pr_err("Failed to request gpios (%d)\n", ret);
imx27_add_imx_ssi(0, &visstrim_m10_ssi_pdata); imx27_add_imx_ssi(0, &visstrim_m10_ssi_pdata);
imx27_add_imx_uart0(&uart_pdata); imx27_add_imx_uart0(&uart_pdata);