forked from Minki/linux
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:
parent
f90da3c7a5
commit
18847b42f8
@ -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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user