Commit 7a4fcf91 authored by Laurent Pinchart's avatar Laurent Pinchart

ARM: mach-shmobile: ag5evm: Add LCDC tx_dev field to platform data

Reference the MIPI-DSI transceiver in the LCDC platform data and make
sure it gets registered before the LCDC.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: default avatarSimon Horman <horms@verge.net.au>
parent 0707330b
...@@ -213,6 +213,84 @@ static struct platform_device irda_device = { ...@@ -213,6 +213,84 @@ static struct platform_device irda_device = {
.num_resources = ARRAY_SIZE(irda_resources), .num_resources = ARRAY_SIZE(irda_resources),
}; };
/* MIPI-DSI */
static struct resource mipidsi0_resources[] = {
[0] = {
.name = "DSI0",
.start = 0xfeab0000,
.end = 0xfeab3fff,
.flags = IORESOURCE_MEM,
},
[1] = {
.name = "DSI0",
.start = 0xfeab4000,
.end = 0xfeab7fff,
.flags = IORESOURCE_MEM,
},
};
static int sh_mipi_set_dot_clock(struct platform_device *pdev,
void __iomem *base,
int enable)
{
struct clk *pck, *phy;
int ret;
pck = clk_get(&pdev->dev, "dsip_clk");
if (IS_ERR(pck)) {
ret = PTR_ERR(pck);
goto sh_mipi_set_dot_clock_pck_err;
}
phy = clk_get(&pdev->dev, "dsiphy_clk");
if (IS_ERR(phy)) {
ret = PTR_ERR(phy);
goto sh_mipi_set_dot_clock_phy_err;
}
if (enable) {
clk_set_rate(pck, clk_round_rate(pck, 24000000));
clk_set_rate(phy, clk_round_rate(pck, 510000000));
clk_enable(pck);
clk_enable(phy);
} else {
clk_disable(pck);
clk_disable(phy);
}
ret = 0;
clk_put(phy);
sh_mipi_set_dot_clock_phy_err:
clk_put(pck);
sh_mipi_set_dot_clock_pck_err:
return ret;
}
static struct sh_mobile_lcdc_info lcdc0_info;
static struct sh_mipi_dsi_info mipidsi0_info = {
.data_format = MIPI_RGB888,
.lcd_chan = &lcdc0_info.ch[0],
.lane = 2,
.vsynw_offset = 20,
.clksrc = 1,
.flags = SH_MIPI_DSI_HSABM |
SH_MIPI_DSI_SYNC_PULSES_MODE |
SH_MIPI_DSI_HSbyteCLK,
.set_dot_clock = sh_mipi_set_dot_clock,
};
static struct platform_device mipidsi0_device = {
.name = "sh-mipi-dsi",
.num_resources = ARRAY_SIZE(mipidsi0_resources),
.resource = mipidsi0_resources,
.id = 0,
.dev = {
.platform_data = &mipidsi0_info,
},
};
static unsigned char lcd_backlight_seq[3][2] = { static unsigned char lcd_backlight_seq[3][2] = {
{ 0x04, 0x07 }, { 0x04, 0x07 },
{ 0x23, 0x80 }, { 0x23, 0x80 },
...@@ -275,6 +353,7 @@ static struct sh_mobile_lcdc_info lcdc0_info = { ...@@ -275,6 +353,7 @@ static struct sh_mobile_lcdc_info lcdc0_info = {
.display_on = lcd_backlight_on, .display_on = lcd_backlight_on,
.display_off = lcd_backlight_reset, .display_off = lcd_backlight_reset,
}, },
.tx_dev = &mipidsi0_device,
} }
}; };
...@@ -302,82 +381,6 @@ static struct platform_device lcdc0_device = { ...@@ -302,82 +381,6 @@ static struct platform_device lcdc0_device = {
}, },
}; };
/* MIPI-DSI */
static struct resource mipidsi0_resources[] = {
[0] = {
.name = "DSI0",
.start = 0xfeab0000,
.end = 0xfeab3fff,
.flags = IORESOURCE_MEM,
},
[1] = {
.name = "DSI0",
.start = 0xfeab4000,
.end = 0xfeab7fff,
.flags = IORESOURCE_MEM,
},
};
static int sh_mipi_set_dot_clock(struct platform_device *pdev,
void __iomem *base,
int enable)
{
struct clk *pck, *phy;
int ret;
pck = clk_get(&pdev->dev, "dsip_clk");
if (IS_ERR(pck)) {
ret = PTR_ERR(pck);
goto sh_mipi_set_dot_clock_pck_err;
}
phy = clk_get(&pdev->dev, "dsiphy_clk");
if (IS_ERR(phy)) {
ret = PTR_ERR(phy);
goto sh_mipi_set_dot_clock_phy_err;
}
if (enable) {
clk_set_rate(pck, clk_round_rate(pck, 24000000));
clk_set_rate(phy, clk_round_rate(pck, 510000000));
clk_enable(pck);
clk_enable(phy);
} else {
clk_disable(pck);
clk_disable(phy);
}
ret = 0;
clk_put(phy);
sh_mipi_set_dot_clock_phy_err:
clk_put(pck);
sh_mipi_set_dot_clock_pck_err:
return ret;
}
static struct sh_mipi_dsi_info mipidsi0_info = {
.data_format = MIPI_RGB888,
.lcd_chan = &lcdc0_info.ch[0],
.lane = 2,
.vsynw_offset = 20,
.clksrc = 1,
.flags = SH_MIPI_DSI_HSABM |
SH_MIPI_DSI_SYNC_PULSES_MODE |
SH_MIPI_DSI_HSbyteCLK,
.set_dot_clock = sh_mipi_set_dot_clock,
};
static struct platform_device mipidsi0_device = {
.name = "sh-mipi-dsi",
.num_resources = ARRAY_SIZE(mipidsi0_resources),
.resource = mipidsi0_resources,
.id = 0,
.dev = {
.platform_data = &mipidsi0_info,
},
};
/* Fixed 2.8V regulators to be used by SDHI0 */ /* Fixed 2.8V regulators to be used by SDHI0 */
static struct regulator_consumer_supply fixed2v8_power_consumers[] = static struct regulator_consumer_supply fixed2v8_power_consumers[] =
{ {
...@@ -531,8 +534,8 @@ static struct platform_device *ag5evm_devices[] __initdata = { ...@@ -531,8 +534,8 @@ static struct platform_device *ag5evm_devices[] __initdata = {
&fsi_device, &fsi_device,
&mmc_device, &mmc_device,
&irda_device, &irda_device,
&lcdc0_device,
&mipidsi0_device, &mipidsi0_device,
&lcdc0_device,
&sdhi0_device, &sdhi0_device,
&sdhi1_device, &sdhi1_device,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment