static int exynos4_tmu_resume(struct platform_device *pdev) { exynos4_tmu_initialize(pdev); exynos4_tmu_control(pdev, true); return 0; }
static int __devinit exynos4_tmu_probe(struct platform_device *pdev) { struct exynos4_tmu_data *data; struct exynos4_tmu_platform_data *pdata = pdev->dev.platform_data; int ret, i; if (!pdata) { dev_err(&pdev->dev, "No platform init data supplied.\n"); return -ENODEV; } data = kzalloc(sizeof(struct exynos4_tmu_data), GFP_KERNEL); if (!data) { dev_err(&pdev->dev, "Failed to allocate driver structure\n"); return -ENOMEM; } data->irq = platform_get_irq(pdev, 0); if (data->irq < 0) { ret = data->irq; dev_err(&pdev->dev, "Failed to get platform irq\n"); goto err_free; } INIT_WORK(&data->irq_work, exynos4_tmu_work); data->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!data->mem) { ret = -ENOENT; dev_err(&pdev->dev, "Failed to get platform resource\n"); goto err_free; } data->mem = request_mem_region(data->mem->start, resource_size(data->mem), pdev->name); if (!data->mem) { ret = -ENODEV; dev_err(&pdev->dev, "Failed to request memory region\n"); goto err_free; } data->base = ioremap(data->mem->start, resource_size(data->mem)); if (!data->base) { ret = -ENODEV; dev_err(&pdev->dev, "Failed to ioremap memory\n"); goto err_mem_region; } ret = request_irq(data->irq, exynos4_tmu_irq, IRQF_TRIGGER_RISING, "exynos4-tmu", data); if (ret) { dev_err(&pdev->dev, "Failed to request irq: %d\n", data->irq); goto err_io_remap; } data->clk = clk_get(NULL, "tmu_apbif"); if (IS_ERR(data->clk)) { ret = PTR_ERR(data->clk); dev_err(&pdev->dev, "Failed to get clock\n"); goto err_irq; } data->pdata = pdata; platform_set_drvdata(pdev, data); mutex_init(&data->lock); data->type = pdev->id_entry->driver_data; ret = exynos4_tmu_initialize(pdev); if (ret) { dev_err(&pdev->dev, "Failed to initialize TMU\n"); goto err_clk; } exynos4_tmu_control(pdev, true); #ifdef CONFIG_SAMSUNG_THERMAL_INTERFACE exynos4_sensor_conf.private_data = data; exynos4_sensor_conf.trip_data.trip_count = 4; for (i = 0; i < exynos4_sensor_conf.trip_data.trip_count; i++) exynos4_sensor_conf.trip_data.trip_val[i] = pdata->threshold + pdata->trigger_levels[i]; exynos4_sensor_conf.cooling_data.freq_pctg_count = pdata->freq_tab_count; for (i = 0; i < pdata->freq_tab_count; i++) exynos4_sensor_conf.cooling_data.freq_data[i].freq_clip_pctg = pdata->freq_tab[i].freq_clip_pctg; exynos4_sensor_conf.tc_data = pdata->tc; ret = exynos4_register_thermal(&exynos4_sensor_conf); if (ret) { dev_err(&pdev->dev, "Failed to register thermal interface\n"); goto err_clk; } #endif return 0; err_clk: platform_set_drvdata(pdev, NULL); clk_put(data->clk); err_irq: free_irq(data->irq, data); err_io_remap: iounmap(data->base); err_mem_region: release_mem_region(data->mem->start, resource_size(data->mem)); err_free: kfree(data); return ret; }
static int __devinit exynos4_tmu_probe(struct platform_device *pdev) { struct exynos4_tmu_data *data; struct exynos4_tmu_platform_data *pdata = pdev->dev.platform_data; int ret; if (!pdata) { dev_err(&pdev->dev, "No platform init data supplied.\n"); return -ENODEV; } data = kzalloc(sizeof(struct exynos4_tmu_data), GFP_KERNEL); if (!data) { dev_err(&pdev->dev, "Failed to allocate driver structure\n"); return -ENOMEM; } data->irq = platform_get_irq(pdev, 0); if (data->irq < 0) { ret = data->irq; dev_err(&pdev->dev, "Failed to get platform irq\n"); goto err_free; } INIT_WORK(&data->irq_work, exynos4_tmu_work); data->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!data->mem) { ret = -ENOENT; dev_err(&pdev->dev, "Failed to get platform resource\n"); goto err_free; } data->mem = request_mem_region(data->mem->start, resource_size(data->mem), pdev->name); if (!data->mem) { ret = -ENODEV; dev_err(&pdev->dev, "Failed to request memory region\n"); goto err_free; } data->base = ioremap(data->mem->start, resource_size(data->mem)); if (!data->base) { ret = -ENODEV; dev_err(&pdev->dev, "Failed to ioremap memory\n"); goto err_mem_region; } ret = request_irq(data->irq, exynos4_tmu_irq, IRQF_TRIGGER_RISING, "exynos4-tmu", data); if (ret) { dev_err(&pdev->dev, "Failed to request irq: %d\n", data->irq); goto err_io_remap; } data->clk = clk_get(NULL, "tmu_apbif"); if (IS_ERR(data->clk)) { ret = PTR_ERR(data->clk); dev_err(&pdev->dev, "Failed to get clock\n"); goto err_irq; } data->pdata = pdata; platform_set_drvdata(pdev, data); mutex_init(&data->lock); ret = exynos4_tmu_initialize(pdev); if (ret) { dev_err(&pdev->dev, "Failed to initialize TMU\n"); goto err_clk; } ret = sysfs_create_group(&pdev->dev.kobj, &exynos4_tmu_attr_group); if (ret) { dev_err(&pdev->dev, "Failed to create sysfs group\n"); goto err_clk; } data->hwmon_dev = hwmon_device_register(&pdev->dev); if (IS_ERR(data->hwmon_dev)) { ret = PTR_ERR(data->hwmon_dev); dev_err(&pdev->dev, "Failed to register hwmon device\n"); goto err_create_group; } exynos4_tmu_control(pdev, true); return 0; err_create_group: sysfs_remove_group(&pdev->dev.kobj, &exynos4_tmu_attr_group); err_clk: platform_set_drvdata(pdev, NULL); clk_put(data->clk); err_irq: free_irq(data->irq, data); err_io_remap: iounmap(data->base); err_mem_region: release_mem_region(data->mem->start, resource_size(data->mem)); err_free: kfree(data); return ret; }