|
@@ -473,7 +473,6 @@ static void exynos5440_tmu_set_emulation(struct exynos_tmu_data *data,
|
|
|
static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
|
|
|
{
|
|
|
struct exynos_tmu_data *data = drv_data;
|
|
|
- struct exynos_tmu_platform_data *pdata = data->pdata;
|
|
|
int ret = -EINVAL;
|
|
|
|
|
|
if (data->soc == SOC_ARCH_EXYNOS4210)
|
|
@@ -696,12 +695,47 @@ static int exynos_map_dt_data(struct platform_device *pdev)
|
|
|
dev_err(&pdev->dev, "No platform init data supplied.\n");
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
+
|
|
|
data->pdata = pdata;
|
|
|
+ data->soc = pdata->type;
|
|
|
+
|
|
|
+ switch (data->soc) {
|
|
|
+ case SOC_ARCH_EXYNOS4210:
|
|
|
+ data->tmu_initialize = exynos4210_tmu_initialize;
|
|
|
+ data->tmu_control = exynos4210_tmu_control;
|
|
|
+ data->tmu_read = exynos4210_tmu_read;
|
|
|
+ data->tmu_clear_irqs = exynos4210_tmu_clear_irqs;
|
|
|
+ break;
|
|
|
+ case SOC_ARCH_EXYNOS3250:
|
|
|
+ case SOC_ARCH_EXYNOS4412:
|
|
|
+ case SOC_ARCH_EXYNOS5250:
|
|
|
+ case SOC_ARCH_EXYNOS5260:
|
|
|
+ case SOC_ARCH_EXYNOS5420:
|
|
|
+ case SOC_ARCH_EXYNOS5420_TRIMINFO:
|
|
|
+ data->tmu_initialize = exynos4412_tmu_initialize;
|
|
|
+ data->tmu_control = exynos4210_tmu_control;
|
|
|
+ data->tmu_read = exynos4412_tmu_read;
|
|
|
+ data->tmu_set_emulation = exynos4412_tmu_set_emulation;
|
|
|
+ data->tmu_clear_irqs = exynos4210_tmu_clear_irqs;
|
|
|
+ break;
|
|
|
+ case SOC_ARCH_EXYNOS5440:
|
|
|
+ data->tmu_initialize = exynos5440_tmu_initialize;
|
|
|
+ data->tmu_control = exynos5440_tmu_control;
|
|
|
+ data->tmu_read = exynos5440_tmu_read;
|
|
|
+ data->tmu_set_emulation = exynos5440_tmu_set_emulation;
|
|
|
+ data->tmu_clear_irqs = exynos5440_tmu_clear_irqs;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ dev_err(&pdev->dev, "Platform not supported\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Check if the TMU shares some registers and then try to map the
|
|
|
* memory of common registers.
|
|
|
*/
|
|
|
- if (!TMU_SUPPORTS(pdata, ADDRESS_MULTIPLE))
|
|
|
+ if (data->soc != SOC_ARCH_EXYNOS5420_TRIMINFO &&
|
|
|
+ data->soc != SOC_ARCH_EXYNOS5440)
|
|
|
return 0;
|
|
|
|
|
|
if (of_address_to_resource(pdev->dev.of_node, 1, &res)) {
|
|
@@ -768,40 +802,6 @@ static int exynos_tmu_probe(struct platform_device *pdev)
|
|
|
goto err_clk_sec;
|
|
|
}
|
|
|
|
|
|
- data->soc = pdata->type;
|
|
|
-
|
|
|
- switch (data->soc) {
|
|
|
- case SOC_ARCH_EXYNOS4210:
|
|
|
- data->tmu_initialize = exynos4210_tmu_initialize;
|
|
|
- data->tmu_control = exynos4210_tmu_control;
|
|
|
- data->tmu_read = exynos4210_tmu_read;
|
|
|
- data->tmu_clear_irqs = exynos4210_tmu_clear_irqs;
|
|
|
- break;
|
|
|
- case SOC_ARCH_EXYNOS3250:
|
|
|
- case SOC_ARCH_EXYNOS4412:
|
|
|
- case SOC_ARCH_EXYNOS5250:
|
|
|
- case SOC_ARCH_EXYNOS5260:
|
|
|
- case SOC_ARCH_EXYNOS5420:
|
|
|
- case SOC_ARCH_EXYNOS5420_TRIMINFO:
|
|
|
- data->tmu_initialize = exynos4412_tmu_initialize;
|
|
|
- data->tmu_control = exynos4210_tmu_control;
|
|
|
- data->tmu_read = exynos4412_tmu_read;
|
|
|
- data->tmu_set_emulation = exynos4412_tmu_set_emulation;
|
|
|
- data->tmu_clear_irqs = exynos4210_tmu_clear_irqs;
|
|
|
- break;
|
|
|
- case SOC_ARCH_EXYNOS5440:
|
|
|
- data->tmu_initialize = exynos5440_tmu_initialize;
|
|
|
- data->tmu_control = exynos5440_tmu_control;
|
|
|
- data->tmu_read = exynos5440_tmu_read;
|
|
|
- data->tmu_set_emulation = exynos5440_tmu_set_emulation;
|
|
|
- data->tmu_clear_irqs = exynos5440_tmu_clear_irqs;
|
|
|
- break;
|
|
|
- default:
|
|
|
- ret = -EINVAL;
|
|
|
- dev_err(&pdev->dev, "Platform not supported\n");
|
|
|
- goto err_clk;
|
|
|
- }
|
|
|
-
|
|
|
ret = exynos_tmu_initialize(pdev);
|
|
|
if (ret) {
|
|
|
dev_err(&pdev->dev, "Failed to initialize TMU\n");
|