• Home
  • Raw
  • Download

Lines Matching +full:saradc +full:- +full:apb

72 		mutex_lock(&indio_dev->mlock);  in rockchip_saradc_read_raw()
74 reinit_completion(&info->completion); in rockchip_saradc_read_raw()
77 writel_relaxed(8, info->regs + SARADC_DLY_PU_SOC); in rockchip_saradc_read_raw()
81 | (chan->channel & SARADC_CTRL_CHN_MASK) in rockchip_saradc_read_raw()
83 info->regs + SARADC_CTRL); in rockchip_saradc_read_raw()
85 if (!wait_for_completion_timeout(&info->completion, in rockchip_saradc_read_raw()
87 writel_relaxed(0, info->regs + SARADC_CTRL); in rockchip_saradc_read_raw()
88 mutex_unlock(&indio_dev->mlock); in rockchip_saradc_read_raw()
89 return -ETIMEDOUT; in rockchip_saradc_read_raw()
92 *val = info->last_val; in rockchip_saradc_read_raw()
93 mutex_unlock(&indio_dev->mlock); in rockchip_saradc_read_raw()
96 ret = regulator_get_voltage(info->vref); in rockchip_saradc_read_raw()
98 dev_err(&indio_dev->dev, "failed to get voltage\n"); in rockchip_saradc_read_raw()
103 *val2 = info->data->num_bits; in rockchip_saradc_read_raw()
106 return -EINVAL; in rockchip_saradc_read_raw()
115 info->last_val = readl_relaxed(info->regs + SARADC_DATA); in rockchip_saradc_isr()
116 info->last_val &= GENMASK(info->data->num_bits - 1, 0); in rockchip_saradc_isr()
119 writel_relaxed(0, info->regs + SARADC_CTRL); in rockchip_saradc_isr()
121 complete(&info->completion); in rockchip_saradc_isr()
182 .compatible = "rockchip,saradc",
185 .compatible = "rockchip,rk3066-tsadc",
188 .compatible = "rockchip,rk3399-saradc",
196 * Reset SARADC Controller.
208 struct device_node *np = pdev->dev.of_node; in rockchip_saradc_probe()
216 return -ENODEV; in rockchip_saradc_probe()
218 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); in rockchip_saradc_probe()
220 dev_err(&pdev->dev, "failed allocating iio device\n"); in rockchip_saradc_probe()
221 return -ENOMEM; in rockchip_saradc_probe()
225 match = of_match_device(rockchip_saradc_match, &pdev->dev); in rockchip_saradc_probe()
227 dev_err(&pdev->dev, "failed to match device\n"); in rockchip_saradc_probe()
228 return -ENODEV; in rockchip_saradc_probe()
231 info->data = match->data; in rockchip_saradc_probe()
234 info->regs = devm_ioremap_resource(&pdev->dev, mem); in rockchip_saradc_probe()
235 if (IS_ERR(info->regs)) in rockchip_saradc_probe()
236 return PTR_ERR(info->regs); in rockchip_saradc_probe()
242 info->reset = devm_reset_control_get_exclusive(&pdev->dev, in rockchip_saradc_probe()
243 "saradc-apb"); in rockchip_saradc_probe()
244 if (IS_ERR(info->reset)) { in rockchip_saradc_probe()
245 ret = PTR_ERR(info->reset); in rockchip_saradc_probe()
246 if (ret != -ENOENT) in rockchip_saradc_probe()
249 dev_dbg(&pdev->dev, "no reset control found\n"); in rockchip_saradc_probe()
250 info->reset = NULL; in rockchip_saradc_probe()
253 init_completion(&info->completion); in rockchip_saradc_probe()
257 dev_err(&pdev->dev, "no irq resource?\n"); in rockchip_saradc_probe()
261 ret = devm_request_irq(&pdev->dev, irq, rockchip_saradc_isr, in rockchip_saradc_probe()
262 0, dev_name(&pdev->dev), info); in rockchip_saradc_probe()
264 dev_err(&pdev->dev, "failed requesting irq %d\n", irq); in rockchip_saradc_probe()
268 info->pclk = devm_clk_get(&pdev->dev, "apb_pclk"); in rockchip_saradc_probe()
269 if (IS_ERR(info->pclk)) { in rockchip_saradc_probe()
270 dev_err(&pdev->dev, "failed to get pclk\n"); in rockchip_saradc_probe()
271 return PTR_ERR(info->pclk); in rockchip_saradc_probe()
274 info->clk = devm_clk_get(&pdev->dev, "saradc"); in rockchip_saradc_probe()
275 if (IS_ERR(info->clk)) { in rockchip_saradc_probe()
276 dev_err(&pdev->dev, "failed to get adc clock\n"); in rockchip_saradc_probe()
277 return PTR_ERR(info->clk); in rockchip_saradc_probe()
280 info->vref = devm_regulator_get(&pdev->dev, "vref"); in rockchip_saradc_probe()
281 if (IS_ERR(info->vref)) { in rockchip_saradc_probe()
282 dev_err(&pdev->dev, "failed to get regulator, %ld\n", in rockchip_saradc_probe()
283 PTR_ERR(info->vref)); in rockchip_saradc_probe()
284 return PTR_ERR(info->vref); in rockchip_saradc_probe()
287 if (info->reset) in rockchip_saradc_probe()
288 rockchip_saradc_reset_controller(info->reset); in rockchip_saradc_probe()
292 * This may become user-configurable in the future. in rockchip_saradc_probe()
294 ret = clk_set_rate(info->clk, info->data->clk_rate); in rockchip_saradc_probe()
296 dev_err(&pdev->dev, "failed to set adc clk rate, %d\n", ret); in rockchip_saradc_probe()
300 ret = regulator_enable(info->vref); in rockchip_saradc_probe()
302 dev_err(&pdev->dev, "failed to enable vref regulator\n"); in rockchip_saradc_probe()
306 ret = clk_prepare_enable(info->pclk); in rockchip_saradc_probe()
308 dev_err(&pdev->dev, "failed to enable pclk\n"); in rockchip_saradc_probe()
312 ret = clk_prepare_enable(info->clk); in rockchip_saradc_probe()
314 dev_err(&pdev->dev, "failed to enable converter clock\n"); in rockchip_saradc_probe()
320 indio_dev->name = dev_name(&pdev->dev); in rockchip_saradc_probe()
321 indio_dev->dev.parent = &pdev->dev; in rockchip_saradc_probe()
322 indio_dev->dev.of_node = pdev->dev.of_node; in rockchip_saradc_probe()
323 indio_dev->info = &rockchip_saradc_iio_info; in rockchip_saradc_probe()
324 indio_dev->modes = INDIO_DIRECT_MODE; in rockchip_saradc_probe()
326 indio_dev->channels = info->data->channels; in rockchip_saradc_probe()
327 indio_dev->num_channels = info->data->num_channels; in rockchip_saradc_probe()
336 clk_disable_unprepare(info->clk); in rockchip_saradc_probe()
338 clk_disable_unprepare(info->pclk); in rockchip_saradc_probe()
340 regulator_disable(info->vref); in rockchip_saradc_probe()
350 clk_disable_unprepare(info->clk); in rockchip_saradc_remove()
351 clk_disable_unprepare(info->pclk); in rockchip_saradc_remove()
352 regulator_disable(info->vref); in rockchip_saradc_remove()
363 clk_disable_unprepare(info->clk); in rockchip_saradc_suspend()
364 clk_disable_unprepare(info->pclk); in rockchip_saradc_suspend()
365 regulator_disable(info->vref); in rockchip_saradc_suspend()
376 ret = regulator_enable(info->vref); in rockchip_saradc_resume()
380 ret = clk_prepare_enable(info->pclk); in rockchip_saradc_resume()
384 ret = clk_prepare_enable(info->clk); in rockchip_saradc_resume()
399 .name = "rockchip-saradc",
408 MODULE_DESCRIPTION("Rockchip SARADC driver");