Lines Matching refs:tscadc

37 void am335x_tsc_se_set_cache(struct ti_tscadc_dev *tscadc, u32 val)
41 spin_lock_irqsave(&tscadc->reg_lock, flags);
42 tscadc->reg_se_cache |= val;
43 if (tscadc->adc_waiting)
44 wake_up(&tscadc->reg_se_wait);
45 else if (!tscadc->adc_in_use)
46 regmap_write(tscadc->regmap, REG_SE, tscadc->reg_se_cache);
48 spin_unlock_irqrestore(&tscadc->reg_lock, flags);
52 static void am335x_tscadc_need_adc(struct ti_tscadc_dev *tscadc)
57 regmap_read(tscadc->regmap, REG_ADCFSM, &reg);
59 tscadc->adc_waiting = true;
60 prepare_to_wait(&tscadc->reg_se_wait, &wait,
62 spin_unlock_irq(&tscadc->reg_lock);
66 spin_lock_irq(&tscadc->reg_lock);
67 finish_wait(&tscadc->reg_se_wait, &wait);
73 regmap_read(tscadc->regmap, REG_ADCFSM, &reg);
75 tscadc->adc_waiting = false;
77 tscadc->adc_in_use = true;
80 void am335x_tsc_se_set_once(struct ti_tscadc_dev *tscadc, u32 val)
82 spin_lock_irq(&tscadc->reg_lock);
83 am335x_tscadc_need_adc(tscadc);
85 regmap_write(tscadc->regmap, REG_SE, val);
86 spin_unlock_irq(&tscadc->reg_lock);
90 void am335x_tsc_se_adc_done(struct ti_tscadc_dev *tscadc)
94 spin_lock_irqsave(&tscadc->reg_lock, flags);
95 tscadc->adc_in_use = false;
96 regmap_write(tscadc->regmap, REG_SE, tscadc->reg_se_cache);
97 spin_unlock_irqrestore(&tscadc->reg_lock, flags);
101 void am335x_tsc_se_clr(struct ti_tscadc_dev *tscadc, u32 val)
105 spin_lock_irqsave(&tscadc->reg_lock, flags);
106 tscadc->reg_se_cache &= ~val;
107 regmap_write(tscadc->regmap, REG_SE, tscadc->reg_se_cache);
108 spin_unlock_irqrestore(&tscadc->reg_lock, flags);
112 static void tscadc_idle_config(struct ti_tscadc_dev *tscadc)
119 regmap_write(tscadc->regmap, REG_IDLECONFIG, idleconfig);
124 struct ti_tscadc_dev *tscadc;
171 tscadc = devm_kzalloc(&pdev->dev, sizeof(*tscadc), GFP_KERNEL);
172 if (!tscadc)
175 tscadc->dev = &pdev->dev;
182 tscadc->irq = err;
185 tscadc->tscadc_base = devm_ioremap_resource(&pdev->dev, res);
186 if (IS_ERR(tscadc->tscadc_base))
187 return PTR_ERR(tscadc->tscadc_base);
189 tscadc->tscadc_phys_base = res->start;
190 tscadc->regmap = devm_regmap_init_mmio(&pdev->dev,
191 tscadc->tscadc_base, &tscadc_regmap_config);
192 if (IS_ERR(tscadc->regmap)) {
194 err = PTR_ERR(tscadc->regmap);
198 spin_lock_init(&tscadc->reg_lock);
199 init_waitqueue_head(&tscadc->reg_se_wait);
219 tscadc->clk_div = clock_rate / ADC_CLK;
222 tscadc->clk_div--;
223 regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
227 regmap_write(tscadc->regmap, REG_CTRL, ctrl);
231 tscadc->tsc_wires = tsc_wires;
236 tscadc_idle_config(tscadc);
241 regmap_write(tscadc->regmap, REG_CTRL, ctrl);
243 tscadc->used_cells = 0;
244 tscadc->tsc_cell = -1;
245 tscadc->adc_cell = -1;
249 tscadc->tsc_cell = tscadc->used_cells;
250 cell = &tscadc->cells[tscadc->used_cells++];
253 cell->platform_data = &tscadc;
254 cell->pdata_size = sizeof(tscadc);
259 tscadc->adc_cell = tscadc->used_cells;
260 cell = &tscadc->cells[tscadc->used_cells++];
263 cell->platform_data = &tscadc;
264 cell->pdata_size = sizeof(tscadc);
268 tscadc->cells, tscadc->used_cells, NULL,
273 platform_set_drvdata(pdev, tscadc);
285 struct ti_tscadc_dev *tscadc = platform_get_drvdata(pdev);
287 regmap_write(tscadc->regmap, REG_SE, 0x00);
292 mfd_remove_devices(tscadc->dev);
304 struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
306 regmap_write(tscadc->regmap, REG_SE, 0x00);
310 regmap_read(tscadc->regmap, REG_CTRL, &ctrl);
313 regmap_write(tscadc->regmap, REG_CTRL, ctrl);
322 struct ti_tscadc_dev *tscadc = dev_get_drvdata(dev);
329 regmap_write(tscadc->regmap, REG_CTRL, ctrl);
331 if (tscadc->tsc_cell != -1) {
332 if (tscadc->tsc_wires == 5)
336 tscadc_idle_config(tscadc);
339 regmap_write(tscadc->regmap, REG_CTRL, ctrl);
341 regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
349 { .compatible = "ti,am3359-tscadc", },
356 .name = "ti_am3359-tscadc",