Lines Matching refs:st

99 static void spear_adc_set_status(struct spear_adc_state *st, u32 val)  in spear_adc_set_status()  argument
101 __raw_writel(val, &st->adc_base_spear6xx->status); in spear_adc_set_status()
104 static void spear_adc_set_clk(struct spear_adc_state *st, u32 val) in spear_adc_set_clk() argument
107 u32 apb_clk = clk_get_rate(st->clk); in spear_adc_set_clk()
112 st->current_clk = apb_clk / count; in spear_adc_set_clk()
115 &st->adc_base_spear6xx->clk); in spear_adc_set_clk()
118 static void spear_adc_set_ctrl(struct spear_adc_state *st, int n, in spear_adc_set_ctrl() argument
121 __raw_writel(val, &st->adc_base_spear6xx->ch_ctrl[n]); in spear_adc_set_ctrl()
124 static u32 spear_adc_get_average(struct spear_adc_state *st) in spear_adc_get_average() argument
126 if (of_device_is_compatible(st->np, "st,spear600-adc")) { in spear_adc_get_average()
127 return __raw_readl(&st->adc_base_spear6xx->average.msb) & in spear_adc_get_average()
130 return __raw_readl(&st->adc_base_spear3xx->average) & in spear_adc_get_average()
135 static void spear_adc_set_scanrate(struct spear_adc_state *st, u32 rate) in spear_adc_set_scanrate() argument
137 if (of_device_is_compatible(st->np, "st,spear600-adc")) { in spear_adc_set_scanrate()
139 &st->adc_base_spear6xx->scan_rate_lo); in spear_adc_set_scanrate()
141 &st->adc_base_spear6xx->scan_rate_hi); in spear_adc_set_scanrate()
143 __raw_writel(rate, &st->adc_base_spear3xx->scan_rate); in spear_adc_set_scanrate()
153 struct spear_adc_state *st = iio_priv(indio_dev); in spear_adc_read_raw() local
158 mutex_lock(&st->lock); in spear_adc_read_raw()
161 SPEAR_ADC_STATUS_AVG_SAMPLE(st->avg_samples) | in spear_adc_read_raw()
164 if (st->vref_external == 0) in spear_adc_read_raw()
167 spear_adc_set_status(st, status); in spear_adc_read_raw()
168 wait_for_completion(&st->completion); /* set by ISR */ in spear_adc_read_raw()
169 *val = st->value; in spear_adc_read_raw()
171 mutex_unlock(&st->lock); in spear_adc_read_raw()
176 *val = st->vref_external; in spear_adc_read_raw()
180 *val = st->current_clk; in spear_adc_read_raw()
193 struct spear_adc_state *st = iio_priv(indio_dev); in spear_adc_write_raw() local
199 mutex_lock(&st->lock); in spear_adc_write_raw()
208 spear_adc_set_clk(st, val); in spear_adc_write_raw()
211 mutex_unlock(&st->lock); in spear_adc_write_raw()
237 struct spear_adc_state *st = dev_id; in spear_adc_isr() local
240 st->value = spear_adc_get_average(st); in spear_adc_isr()
241 complete(&st->completion); in spear_adc_isr()
246 static int spear_adc_configure(struct spear_adc_state *st) in spear_adc_configure() argument
251 spear_adc_set_status(st, 0); in spear_adc_configure()
252 __raw_writel(0, &st->adc_base_spear6xx->clk); in spear_adc_configure()
254 spear_adc_set_ctrl(st, i, 0); in spear_adc_configure()
255 spear_adc_set_scanrate(st, 0); in spear_adc_configure()
257 spear_adc_set_clk(st, st->sampling_freq); in spear_adc_configure()
271 struct spear_adc_state *st; in spear_adc_probe() local
282 st = iio_priv(indio_dev); in spear_adc_probe()
284 mutex_init(&st->lock); in spear_adc_probe()
286 st->np = np; in spear_adc_probe()
293 st->adc_base_spear6xx = devm_platform_ioremap_resource(pdev, 0); in spear_adc_probe()
294 if (IS_ERR(st->adc_base_spear6xx)) in spear_adc_probe()
295 return PTR_ERR(st->adc_base_spear6xx); in spear_adc_probe()
297 st->adc_base_spear3xx = in spear_adc_probe()
298 (struct adc_regs_spear3xx __iomem *)st->adc_base_spear6xx; in spear_adc_probe()
300 st->clk = devm_clk_get(dev, NULL); in spear_adc_probe()
301 if (IS_ERR(st->clk)) { in spear_adc_probe()
303 return PTR_ERR(st->clk); in spear_adc_probe()
306 ret = clk_prepare_enable(st->clk); in spear_adc_probe()
319 st); in spear_adc_probe()
326 &st->sampling_freq)) { in spear_adc_probe()
336 of_property_read_u32(np, "average-samples", &st->avg_samples); in spear_adc_probe()
342 of_property_read_u32(np, "vref-external", &st->vref_external); in spear_adc_probe()
344 spear_adc_configure(st); in spear_adc_probe()
348 init_completion(&st->completion); in spear_adc_probe()
365 clk_disable_unprepare(st->clk); in spear_adc_probe()
372 struct spear_adc_state *st = iio_priv(indio_dev); in spear_adc_remove() local
375 clk_disable_unprepare(st->clk); in spear_adc_remove()