Lines Matching refs:st
138 #define AT91_ADC_CHAN(st, ch) \
139 (st->registers->channel_base + (ch * 4))
140 #define at91_adc_readl(st, reg) \
141 (readl_relaxed(st->reg_base + reg))
142 #define at91_adc_writel(st, reg, val) \
143 (writel_relaxed(val, st->reg_base + reg))
249 struct at91_adc_state *st = iio_priv(idev);
257 st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, chan->channel));
261 iio_push_to_buffers_with_timestamp(idev, st->buffer, pf->timestamp);
266 at91_adc_readl(st, AT91_ADC_LCDR);
268 enable_irq(st->irq);
276 struct at91_adc_state *st = iio_priv(idev);
282 st->last_value = at91_adc_readl(st, AT91_ADC_CHAN(st, st->chnb));
284 at91_adc_readl(st, AT91_ADC_LCDR);
285 st->done = true;
286 wake_up_interruptible(&st->wq_data_avail);
292 struct at91_adc_state *st = iio_priv(idev);
298 unsigned int xyz_mask_bits = st->res;
303 reg = at91_adc_readl(st, AT91_ADC_TSXPOSR);
314 reg = at91_adc_readl(st, AT91_ADC_TSYPOSR);
325 reg = at91_adc_readl(st, AT91_ADC_TSPRESSR);
333 pres = st->ts_pressure_threshold; /* no pen contacted */
338 if (pres < st->ts_pressure_threshold) {
341 input_report_abs(st->ts_input, ABS_X, x);
342 input_report_abs(st->ts_input, ABS_Y, y);
343 input_report_abs(st->ts_input, ABS_PRESSURE, pres);
344 input_report_key(st->ts_input, BTN_TOUCH, 1);
345 input_sync(st->ts_input);
356 struct at91_adc_state *st = iio_priv(idev);
357 u32 status = at91_adc_readl(st, st->registers->status_register);
360 status &= at91_adc_readl(st, AT91_ADC_IMR);
361 if (status & GENMASK(st->num_channels - 1, 0))
366 reg = at91_adc_readl(st, AT91_ADC_MR);
368 at91_adc_writel(st, AT91_ADC_MR, reg);
370 at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_PEN);
371 at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_NOPEN
374 at91_adc_writel(st, st->registers->trigger_register,
376 AT91_ADC_TRGR_TRGPER_(st->ts_sample_period_val));
378 reg = at91_adc_readl(st, AT91_ADC_MR);
379 reg |= AT91_ADC_PENDBC_(st->ts_pendbc) & AT91_ADC_PENDBC;
380 at91_adc_writel(st, AT91_ADC_MR, reg);
381 at91_adc_writel(st, st->registers->trigger_register,
384 at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_NOPEN
386 at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_PEN);
387 st->ts_bufferedmeasure = false;
388 input_report_key(st->ts_input, BTN_TOUCH, 0);
389 input_sync(st->ts_input);
390 } else if (status & AT91_ADC_EOC(3) && st->ts_input) {
392 if (st->ts_bufferedmeasure) {
398 input_report_abs(st->ts_input, ABS_X, st->ts_prev_absx);
399 input_report_abs(st->ts_input, ABS_Y, st->ts_prev_absy);
400 input_report_key(st->ts_input, BTN_TOUCH, 1);
401 input_sync(st->ts_input);
403 st->ts_bufferedmeasure = true;
406 st->ts_prev_absx = at91_adc_readl(st, AT91_ADC_CHAN(st, 3))
408 st->ts_prev_absx /= at91_adc_readl(st, AT91_ADC_CHAN(st, 2));
410 st->ts_prev_absy = at91_adc_readl(st, AT91_ADC_CHAN(st, 1))
412 st->ts_prev_absy /= at91_adc_readl(st, AT91_ADC_CHAN(st, 0));
421 struct at91_adc_state *st = iio_priv(idev);
422 u32 status = at91_adc_readl(st, st->registers->status_register);
428 if (status & GENMASK(st->num_channels - 1, 0))
432 at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_PEN);
433 at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_NOPEN |
436 at91_adc_writel(st, st->registers->trigger_register,
438 AT91_ADC_TRGR_TRGPER_(st->ts_sample_period_val));
440 at91_adc_writel(st, st->registers->trigger_register, 0);
441 at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_NOPEN |
443 at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_PEN);
445 input_report_key(st->ts_input, BTN_TOUCH, 0);
446 input_sync(st->ts_input);
457 at91_adc_readl(st, AT91_ADC_TSXPOSR);
458 at91_adc_readl(st, AT91_ADC_TSYPOSR);
459 at91_adc_readl(st, AT91_ADC_TSPRESSR);
468 struct at91_adc_state *st = iio_priv(idev);
474 if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_4WIRE)
476 else if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_5WIRE)
480 st->channels_mask &= ~rsvd_mask;
482 idev->num_channels = bitmap_weight(&st->channels_mask,
483 st->num_channels) + 1;
493 for_each_set_bit(bit, &st->channels_mask, st->num_channels) {
501 chan->scan_type.realbits = st->res;
524 struct at91_adc_state *st = iio_priv(idev);
527 for (i = 0; i < st->trigger_number; i++) {
552 struct at91_adc_state *st = iio_priv(idev);
553 struct at91_adc_reg_desc *reg = st->registers;
554 u32 status = at91_adc_readl(st, reg->trigger_register);
559 st->trigger_list,
565 st->buffer = kmalloc(idev->scan_bytes, GFP_KERNEL);
566 if (st->buffer == NULL)
569 at91_adc_writel(st, reg->trigger_register,
573 st->num_channels) {
575 at91_adc_writel(st, AT91_ADC_CHER,
579 at91_adc_writel(st, AT91_ADC_IER, reg->drdy_mask);
582 at91_adc_writel(st, AT91_ADC_IDR, reg->drdy_mask);
584 at91_adc_writel(st, reg->trigger_register,
588 st->num_channels) {
590 at91_adc_writel(st, AT91_ADC_CHDR,
593 kfree(st->buffer);
629 struct at91_adc_state *st = iio_priv(idev);
632 st->trig = devm_kcalloc(&idev->dev,
633 st->trigger_number, sizeof(*st->trig),
636 if (st->trig == NULL) {
641 for (i = 0; i < st->trigger_number; i++) {
642 if (st->trigger_list[i].is_external && !(st->use_external))
645 st->trig[i] = at91_adc_allocate_trigger(idev,
646 st->trigger_list + i);
647 if (st->trig[i] == NULL) {
659 iio_trigger_unregister(st->trig[i]);
660 iio_trigger_free(st->trig[i]);
668 struct at91_adc_state *st = iio_priv(idev);
671 for (i = 0; i < st->trigger_number; i++) {
672 iio_trigger_unregister(st->trig[i]);
673 iio_trigger_free(st->trig[i]);
692 struct at91_adc_state *st = iio_priv(idev);
697 mutex_lock(&st->lock);
699 st->chnb = chan->channel;
700 at91_adc_writel(st, AT91_ADC_CHER,
702 at91_adc_writel(st, AT91_ADC_IER, BIT(chan->channel));
703 at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_START);
705 ret = wait_event_interruptible_timeout(st->wq_data_avail,
706 st->done,
712 at91_adc_writel(st, AT91_ADC_CHDR,
714 at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel));
718 *val = st->last_value;
719 st->last_value = 0;
720 st->done = false;
729 mutex_unlock(&st->lock);
733 *val = st->vref_mv;
745 struct at91_adc_state *st = iio_priv(idev);
778 st->res = resolutions[i];
780 st->low_res = true;
782 st->low_res = false;
784 dev_info(&idev->dev, "Resolution used: %u bits\n", st->res);
837 struct at91_adc_state *st, struct device *dev)
851 st->touchscreen_type = prop;
858 if (!st->caps->has_tsmr)
862 st->ts_pressure_threshold = prop;
863 if (st->ts_pressure_threshold) {
874 struct at91_adc_state *st = iio_priv(idev);
883 st->caps = (struct at91_adc_caps *)
886 st->use_external = of_property_read_bool(node, "atmel,adc-use-external-triggers");
893 st->channels_mask = prop;
895 st->sleep_mode = of_property_read_bool(node, "atmel,adc-sleep-mode");
902 st->startup_time = prop;
906 st->sample_hold_time = prop;
913 st->vref_mv = prop;
919 st->registers = &st->caps->registers;
920 st->num_channels = st->caps->num_channels;
921 st->trigger_number = of_get_child_count(node);
922 st->trigger_list = devm_kcalloc(&idev->dev,
923 st->trigger_number,
926 if (!st->trigger_list) {
933 struct at91_adc_trigger *trig = st->trigger_list + i;
954 if (st->caps->has_ts)
955 return at91_adc_probe_dt_ts(node, st, &idev->dev);
965 static int at91_adc_probe_pdata(struct at91_adc_state *st,
973 st->caps = (struct at91_adc_caps *)
976 st->use_external = pdata->use_external_triggers;
977 st->vref_mv = pdata->vref;
978 st->channels_mask = pdata->channels_used;
979 st->num_channels = st->caps->num_channels;
980 st->startup_time = pdata->startup_time;
981 st->trigger_number = pdata->trigger_number;
982 st->trigger_list = pdata->trigger_list;
983 st->registers = &st->caps->registers;
984 st->touchscreen_type = pdata->touchscreen_type;
996 struct at91_adc_state *st = input_get_drvdata(dev);
998 if (st->caps->has_tsmr)
999 at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_PEN);
1001 at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_PEN);
1007 struct at91_adc_state *st = input_get_drvdata(dev);
1009 if (st->caps->has_tsmr)
1010 at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_PEN);
1012 at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_PEN);
1017 struct at91_adc_state *st = iio_priv(idev);
1026 st->ts_pendbc = round_up(TOUCH_PEN_DETECT_DEBOUNCE_US * adc_clk_khz /
1029 while (st->ts_pendbc >> ++i)
1031 if (abs(st->ts_pendbc - (1 << i)) < abs(st->ts_pendbc - (1 << (i - 1))))
1032 st->ts_pendbc = i;
1034 st->ts_pendbc = i - 1;
1036 if (!st->caps->has_tsmr) {
1037 reg = at91_adc_readl(st, AT91_ADC_MR);
1040 reg |= AT91_ADC_PENDBC_(st->ts_pendbc) & AT91_ADC_PENDBC;
1041 at91_adc_writel(st, AT91_ADC_MR, reg);
1044 at91_adc_writel(st, AT91_ADC_TSR, reg);
1046 st->ts_sample_period_val = round_up((TOUCH_SAMPLE_PERIOD_US_RL *
1060 if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_4WIRE)
1066 reg |= AT91_ADC_TSMR_TSAV_(st->caps->ts_filter_average)
1068 reg |= AT91_ADC_TSMR_PENDBC_(st->ts_pendbc) & AT91_ADC_TSMR_PENDBC;
1073 at91_adc_writel(st, AT91_ADC_TSMR, reg);
1080 at91_adc_writel(st, AT91_ADC_ACR, st->caps->ts_pen_detect_sensitivity
1084 st->ts_sample_period_val = round_up((TOUCH_SAMPLE_PERIOD_US *
1093 struct at91_adc_state *st = iio_priv(idev);
1112 if (st->caps->has_tsmr) {
1119 if (st->touchscreen_type != ATMEL_ADC_TOUCHSCREEN_4WIRE) {
1132 st->ts_input = input;
1133 input_set_drvdata(input, st);
1142 input_free_device(st->ts_input);
1146 static void at91_ts_unregister(struct at91_adc_state *st)
1148 input_unregister_device(st->ts_input);
1156 struct at91_adc_state *st;
1163 st = iio_priv(idev);
1168 ret = at91_adc_probe_pdata(st, pdev);
1181 st->irq = platform_get_irq(pdev, 0);
1182 if (st->irq < 0)
1185 st->reg_base = devm_platform_ioremap_resource(pdev, 0);
1186 if (IS_ERR(st->reg_base))
1187 return PTR_ERR(st->reg_base);
1193 at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_SWRST);
1194 at91_adc_writel(st, AT91_ADC_IDR, 0xFFFFFFFF);
1196 if (st->caps->has_tsmr)
1197 ret = request_irq(st->irq, at91_adc_9x5_interrupt, 0,
1200 ret = request_irq(st->irq, at91_adc_rl_interrupt, 0,
1207 st->clk = devm_clk_get(&pdev->dev, "adc_clk");
1208 if (IS_ERR(st->clk)) {
1210 ret = PTR_ERR(st->clk);
1214 ret = clk_prepare_enable(st->clk);
1221 st->adc_clk = devm_clk_get(&pdev->dev, "adc_op_clk");
1222 if (IS_ERR(st->adc_clk)) {
1224 ret = PTR_ERR(st->adc_clk);
1228 ret = clk_prepare_enable(st->adc_clk);
1240 mstrclk = clk_get_rate(st->clk);
1241 adc_clk = clk_get_rate(st->adc_clk);
1249 if (!st->startup_time) {
1254 ticks = (*st->caps->calc_startup_ticks)(st->startup_time, adc_clk_khz);
1261 if (st->sample_hold_time > 0)
1262 shtim = round_up((st->sample_hold_time * adc_clk_khz / 1000)
1267 reg = AT91_ADC_PRESCAL_(prsc) & st->registers->mr_prescal_mask;
1268 reg |= AT91_ADC_STARTUP_(ticks) & st->registers->mr_startup_mask;
1269 if (st->low_res)
1271 if (st->sleep_mode)
1274 at91_adc_writel(st, AT91_ADC_MR, reg);
1283 init_waitqueue_head(&st->wq_data_avail);
1284 mutex_init(&st->lock);
1291 if (!st->touchscreen_type) {
1321 if (!st->touchscreen_type) {
1325 at91_ts_unregister(st);
1328 clk_disable_unprepare(st->adc_clk);
1330 clk_disable_unprepare(st->clk);
1332 free_irq(st->irq, idev);
1339 struct at91_adc_state *st = iio_priv(idev);
1342 if (!st->touchscreen_type) {
1346 at91_ts_unregister(st);
1348 clk_disable_unprepare(st->adc_clk);
1349 clk_disable_unprepare(st->clk);
1350 free_irq(st->irq, idev);
1359 struct at91_adc_state *st = iio_priv(idev);
1362 clk_disable_unprepare(st->clk);
1370 struct at91_adc_state *st = iio_priv(idev);
1372 clk_prepare_enable(st->clk);