aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/omap3isp/isp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/platform/omap3isp/isp.c')
-rw-r--r--drivers/media/platform/omap3isp/isp.c74
1 files changed, 12 insertions, 62 deletions
diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
index e4aaee91201d..383a727b8aa0 100644
--- a/drivers/media/platform/omap3isp/isp.c
+++ b/drivers/media/platform/omap3isp/isp.c
@@ -1406,28 +1406,15 @@ static const char *isp_clocks[] = {
1406 "l3_ick", 1406 "l3_ick",
1407}; 1407};
1408 1408
1409static void isp_put_clocks(struct isp_device *isp)
1410{
1411 unsigned int i;
1412
1413 for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) {
1414 if (isp->clock[i]) {
1415 clk_put(isp->clock[i]);
1416 isp->clock[i] = NULL;
1417 }
1418 }
1419}
1420
1421static int isp_get_clocks(struct isp_device *isp) 1409static int isp_get_clocks(struct isp_device *isp)
1422{ 1410{
1423 struct clk *clk; 1411 struct clk *clk;
1424 unsigned int i; 1412 unsigned int i;
1425 1413
1426 for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) { 1414 for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) {
1427 clk = clk_get(isp->dev, isp_clocks[i]); 1415 clk = devm_clk_get(isp->dev, isp_clocks[i]);
1428 if (IS_ERR(clk)) { 1416 if (IS_ERR(clk)) {
1429 dev_err(isp->dev, "clk_get %s failed\n", isp_clocks[i]); 1417 dev_err(isp->dev, "clk_get %s failed\n", isp_clocks[i]);
1430 isp_put_clocks(isp);
1431 return PTR_ERR(clk); 1418 return PTR_ERR(clk);
1432 } 1419 }
1433 1420
@@ -1993,7 +1980,6 @@ error_csiphy:
1993static int isp_remove(struct platform_device *pdev) 1980static int isp_remove(struct platform_device *pdev)
1994{ 1981{
1995 struct isp_device *isp = platform_get_drvdata(pdev); 1982 struct isp_device *isp = platform_get_drvdata(pdev);
1996 int i;
1997 1983
1998 isp_unregister_entities(isp); 1984 isp_unregister_entities(isp);
1999 isp_cleanup_modules(isp); 1985 isp_cleanup_modules(isp);
@@ -2004,26 +1990,6 @@ static int isp_remove(struct platform_device *pdev)
2004 isp->domain = NULL; 1990 isp->domain = NULL;
2005 omap3isp_put(isp); 1991 omap3isp_put(isp);
2006 1992
2007 free_irq(isp->irq_num, isp);
2008 isp_put_clocks(isp);
2009
2010 for (i = 0; i < OMAP3_ISP_IOMEM_LAST; i++) {
2011 if (isp->mmio_base[i]) {
2012 iounmap(isp->mmio_base[i]);
2013 isp->mmio_base[i] = NULL;
2014 }
2015
2016 if (isp->mmio_base_phys[i]) {
2017 release_mem_region(isp->mmio_base_phys[i],
2018 isp->mmio_size[i]);
2019 isp->mmio_base_phys[i] = 0;
2020 }
2021 }
2022
2023 regulator_put(isp->isp_csiphy1.vdd);
2024 regulator_put(isp->isp_csiphy2.vdd);
2025 kfree(isp);
2026
2027 return 0; 1993 return 0;
2028} 1994}
2029 1995
@@ -2041,7 +2007,8 @@ static int isp_map_mem_resource(struct platform_device *pdev,
2041 return -ENODEV; 2007 return -ENODEV;
2042 } 2008 }
2043 2009
2044 if (!request_mem_region(mem->start, resource_size(mem), pdev->name)) { 2010 if (!devm_request_mem_region(isp->dev, mem->start, resource_size(mem),
2011 pdev->name)) {
2045 dev_err(isp->dev, 2012 dev_err(isp->dev,
2046 "cannot reserve camera register I/O region\n"); 2013 "cannot reserve camera register I/O region\n");
2047 return -ENODEV; 2014 return -ENODEV;
@@ -2050,8 +2017,9 @@ static int isp_map_mem_resource(struct platform_device *pdev,
2050 isp->mmio_size[res] = resource_size(mem); 2017 isp->mmio_size[res] = resource_size(mem);
2051 2018
2052 /* map the region */ 2019 /* map the region */
2053 isp->mmio_base[res] = ioremap_nocache(isp->mmio_base_phys[res], 2020 isp->mmio_base[res] = devm_ioremap_nocache(isp->dev,
2054 isp->mmio_size[res]); 2021 isp->mmio_base_phys[res],
2022 isp->mmio_size[res]);
2055 if (!isp->mmio_base[res]) { 2023 if (!isp->mmio_base[res]) {
2056 dev_err(isp->dev, "cannot map camera register I/O region\n"); 2024 dev_err(isp->dev, "cannot map camera register I/O region\n");
2057 return -ENODEV; 2025 return -ENODEV;
@@ -2081,7 +2049,7 @@ static int isp_probe(struct platform_device *pdev)
2081 if (pdata == NULL) 2049 if (pdata == NULL)
2082 return -EINVAL; 2050 return -EINVAL;
2083 2051
2084 isp = kzalloc(sizeof(*isp), GFP_KERNEL); 2052 isp = devm_kzalloc(&pdev->dev, sizeof(*isp), GFP_KERNEL);
2085 if (!isp) { 2053 if (!isp) {
2086 dev_err(&pdev->dev, "could not allocate memory\n"); 2054 dev_err(&pdev->dev, "could not allocate memory\n");
2087 return -ENOMEM; 2055 return -ENOMEM;
@@ -2104,8 +2072,8 @@ static int isp_probe(struct platform_device *pdev)
2104 platform_set_drvdata(pdev, isp); 2072 platform_set_drvdata(pdev, isp);
2105 2073
2106 /* Regulators */ 2074 /* Regulators */
2107 isp->isp_csiphy1.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY1"); 2075 isp->isp_csiphy1.vdd = devm_regulator_get(&pdev->dev, "VDD_CSIPHY1");
2108 isp->isp_csiphy2.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY2"); 2076 isp->isp_csiphy2.vdd = devm_regulator_get(&pdev->dev, "VDD_CSIPHY2");
2109 2077
2110 /* Clocks 2078 /* Clocks
2111 * 2079 *
@@ -2180,7 +2148,8 @@ static int isp_probe(struct platform_device *pdev)
2180 goto detach_dev; 2148 goto detach_dev;
2181 } 2149 }
2182 2150
2183 if (request_irq(isp->irq_num, isp_isr, IRQF_SHARED, "OMAP3 ISP", isp)) { 2151 if (devm_request_irq(isp->dev, isp->irq_num, isp_isr, IRQF_SHARED,
2152 "OMAP3 ISP", isp)) {
2184 dev_err(isp->dev, "Unable to request IRQ\n"); 2153 dev_err(isp->dev, "Unable to request IRQ\n");
2185 ret = -EINVAL; 2154 ret = -EINVAL;
2186 goto detach_dev; 2155 goto detach_dev;
@@ -2189,7 +2158,7 @@ static int isp_probe(struct platform_device *pdev)
2189 /* Entities */ 2158 /* Entities */
2190 ret = isp_initialize_modules(isp); 2159 ret = isp_initialize_modules(isp);
2191 if (ret < 0) 2160 if (ret < 0)
2192 goto error_irq; 2161 goto detach_dev;
2193 2162
2194 ret = isp_register_entities(isp); 2163 ret = isp_register_entities(isp);
2195 if (ret < 0) 2164 if (ret < 0)
@@ -2202,8 +2171,6 @@ static int isp_probe(struct platform_device *pdev)
2202 2171
2203error_modules: 2172error_modules:
2204 isp_cleanup_modules(isp); 2173 isp_cleanup_modules(isp);
2205error_irq:
2206 free_irq(isp->irq_num, isp);
2207detach_dev: 2174detach_dev:
2208 iommu_detach_device(isp->domain, &pdev->dev); 2175 iommu_detach_device(isp->domain, &pdev->dev);
2209free_domain: 2176free_domain:
@@ -2211,26 +2178,9 @@ free_domain:
2211error_isp: 2178error_isp:
2212 omap3isp_put(isp); 2179 omap3isp_put(isp);
2213error: 2180error:
2214 isp_put_clocks(isp);
2215
2216 for (i = 0; i < OMAP3_ISP_IOMEM_LAST; i++) {
2217 if (isp->mmio_base[i]) {
2218 iounmap(isp->mmio_base[i]);
2219 isp->mmio_base[i] = NULL;
2220 }
2221
2222 if (isp->mmio_base_phys[i]) {
2223 release_mem_region(isp->mmio_base_phys[i],
2224 isp->mmio_size[i]);
2225 isp->mmio_base_phys[i] = 0;
2226 }
2227 }
2228 regulator_put(isp->isp_csiphy2.vdd);
2229 regulator_put(isp->isp_csiphy1.vdd);
2230 platform_set_drvdata(pdev, NULL); 2181 platform_set_drvdata(pdev, NULL);
2231 2182
2232 mutex_destroy(&isp->isp_mutex); 2183 mutex_destroy(&isp->isp_mutex);
2233 kfree(isp);
2234 2184
2235 return ret; 2185 return ret;
2236} 2186}