Lines Matching refs:st

99 static void spear_adc_set_status(struct spear_adc_state *st, u32 val)
101 __raw_writel(val, &st->adc_base_spear6xx->status);
104 static void spear_adc_set_clk(struct spear_adc_state *st, u32 val)
107 u32 apb_clk = clk_get_rate(st->clk);
112 st->current_clk = apb_clk / count;
115 &st->adc_base_spear6xx->clk);
118 static void spear_adc_set_ctrl(struct spear_adc_state *st, int n,
121 __raw_writel(val, &st->adc_base_spear6xx->ch_ctrl[n]);
124 static u32 spear_adc_get_average(struct spear_adc_state *st)
126 if (device_is_compatible(st->dev, "st,spear600-adc")) {
127 return __raw_readl(&st->adc_base_spear6xx->average.msb) &
130 return __raw_readl(&st->adc_base_spear3xx->average) &
135 static void spear_adc_set_scanrate(struct spear_adc_state *st, u32 rate)
137 if (device_is_compatible(st->dev, "st,spear600-adc")) {
139 &st->adc_base_spear6xx->scan_rate_lo);
141 &st->adc_base_spear6xx->scan_rate_hi);
143 __raw_writel(rate, &st->adc_base_spear3xx->scan_rate);
153 struct spear_adc_state *st = iio_priv(indio_dev);
158 mutex_lock(&st->lock);
161 SPEAR_ADC_STATUS_AVG_SAMPLE(st->avg_samples) |
164 if (st->vref_external == 0)
167 spear_adc_set_status(st, status);
168 wait_for_completion(&st->completion); /* set by ISR */
169 *val = st->value;
171 mutex_unlock(&st->lock);
176 *val = st->vref_external;
180 *val = st->current_clk;
193 struct spear_adc_state *st = iio_priv(indio_dev);
199 mutex_lock(&st->lock);
208 spear_adc_set_clk(st, val);
211 mutex_unlock(&st->lock);
237 struct spear_adc_state *st = dev_id;
240 st->value = spear_adc_get_average(st);
241 complete(&st->completion);
246 static int spear_adc_configure(struct spear_adc_state *st)
251 spear_adc_set_status(st, 0);
252 __raw_writel(0, &st->adc_base_spear6xx->clk);
254 spear_adc_set_ctrl(st, i, 0);
255 spear_adc_set_scanrate(st, 0);
257 spear_adc_set_clk(st, st->sampling_freq);
270 struct spear_adc_state *st;
280 st = iio_priv(indio_dev);
281 st->dev = dev;
283 mutex_init(&st->lock);
290 st->adc_base_spear6xx = devm_platform_ioremap_resource(pdev, 0);
291 if (IS_ERR(st->adc_base_spear6xx))
292 return PTR_ERR(st->adc_base_spear6xx);
294 st->adc_base_spear3xx =
295 (struct adc_regs_spear3xx __iomem *)st->adc_base_spear6xx;
297 st->clk = devm_clk_get_enabled(dev, NULL);
298 if (IS_ERR(st->clk))
299 return dev_err_probe(dev, PTR_ERR(st->clk),
307 st);
311 if (device_property_read_u32(dev, "sampling-frequency", &st->sampling_freq))
319 device_property_read_u32(dev, "average-samples", &st->avg_samples);
325 device_property_read_u32(dev, "vref-external", &st->vref_external);
327 spear_adc_configure(st);
329 init_completion(&st->completion);
347 { .compatible = "st,spear600-adc", },