diff options
-rw-r--r-- | drivers/media/platform/omap3isp/isp.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c index 7da622ed86ed..b34bf928d80c 100644 --- a/drivers/media/platform/omap3isp/isp.c +++ b/drivers/media/platform/omap3isp/isp.c | |||
@@ -1350,10 +1350,7 @@ static int isp_enable_clocks(struct isp_device *isp) | |||
1350 | * has to be twice of what is set on OMAP3430 to get | 1350 | * has to be twice of what is set on OMAP3430 to get |
1351 | * the required value for cam_mclk | 1351 | * the required value for cam_mclk |
1352 | */ | 1352 | */ |
1353 | if (cpu_is_omap3630()) | 1353 | divisor = isp->revision == ISP_REVISION_15_0 ? 1 : 2; |
1354 | divisor = 1; | ||
1355 | else | ||
1356 | divisor = 2; | ||
1357 | 1354 | ||
1358 | r = clk_prepare_enable(isp->clock[ISP_CLK_CAM_ICK]); | 1355 | r = clk_prepare_enable(isp->clock[ISP_CLK_CAM_ICK]); |
1359 | if (r) { | 1356 | if (r) { |
@@ -2111,7 +2108,11 @@ static int __devinit isp_probe(struct platform_device *pdev) | |||
2111 | isp->isp_csiphy1.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY1"); | 2108 | isp->isp_csiphy1.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY1"); |
2112 | isp->isp_csiphy2.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY2"); | 2109 | isp->isp_csiphy2.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY2"); |
2113 | 2110 | ||
2114 | /* Clocks */ | 2111 | /* Clocks |
2112 | * | ||
2113 | * The ISP clock tree is revision-dependent. We thus need to enable ICLK | ||
2114 | * manually to read the revision before calling __omap3isp_get(). | ||
2115 | */ | ||
2115 | ret = isp_map_mem_resource(pdev, isp, OMAP3_ISP_IOMEM_MAIN); | 2116 | ret = isp_map_mem_resource(pdev, isp, OMAP3_ISP_IOMEM_MAIN); |
2116 | if (ret < 0) | 2117 | if (ret < 0) |
2117 | goto error; | 2118 | goto error; |
@@ -2120,6 +2121,16 @@ static int __devinit isp_probe(struct platform_device *pdev) | |||
2120 | if (ret < 0) | 2121 | if (ret < 0) |
2121 | goto error; | 2122 | goto error; |
2122 | 2123 | ||
2124 | ret = clk_enable(isp->clock[ISP_CLK_CAM_ICK]); | ||
2125 | if (ret < 0) | ||
2126 | goto error; | ||
2127 | |||
2128 | isp->revision = isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION); | ||
2129 | dev_info(isp->dev, "Revision %d.%d found\n", | ||
2130 | (isp->revision & 0xf0) >> 4, isp->revision & 0x0f); | ||
2131 | |||
2132 | clk_disable(isp->clock[ISP_CLK_CAM_ICK]); | ||
2133 | |||
2123 | if (__omap3isp_get(isp, false) == NULL) { | 2134 | if (__omap3isp_get(isp, false) == NULL) { |
2124 | ret = -ENODEV; | 2135 | ret = -ENODEV; |
2125 | goto error; | 2136 | goto error; |
@@ -2130,10 +2141,6 @@ static int __devinit isp_probe(struct platform_device *pdev) | |||
2130 | goto error_isp; | 2141 | goto error_isp; |
2131 | 2142 | ||
2132 | /* Memory resources */ | 2143 | /* Memory resources */ |
2133 | isp->revision = isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION); | ||
2134 | dev_info(isp->dev, "Revision %d.%d found\n", | ||
2135 | (isp->revision & 0xf0) >> 4, isp->revision & 0x0f); | ||
2136 | |||
2137 | for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++) | 2144 | for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++) |
2138 | if (isp->revision == isp_res_maps[m].isp_rev) | 2145 | if (isp->revision == isp_res_maps[m].isp_rev) |
2139 | break; | 2146 | break; |