Lines Matching refs:gpadc
109 int (*calibrate)(struct twl6030_gpadc_data *gpadc);
372 struct twl6030_gpadc_data *gpadc = iio_priv(indio_dev); in twl6030_gpadc_irq_handler() local
374 complete(&gpadc->irq_complete); in twl6030_gpadc_irq_handler()
435 static int twl6030_gpadc_make_correction(struct twl6030_gpadc_data *gpadc, in twl6030_gpadc_make_correction() argument
438 const struct twl6030_ideal_code *ideal = gpadc->pdata->ideal; in twl6030_gpadc_make_correction()
442 i = twl6030_gpadc_lookup(ideal, channel, gpadc->pdata->nchannels); in twl6030_gpadc_make_correction()
444 gpadc->twl6030_cal_tbl[i].offset_error) / in twl6030_gpadc_make_correction()
445 gpadc->twl6030_cal_tbl[i].gain_error; in twl6030_gpadc_make_correction()
450 static int twl6030_gpadc_get_raw(struct twl6030_gpadc_data *gpadc, in twl6030_gpadc_get_raw() argument
453 u8 reg = gpadc->pdata->channel_to_reg(channel); in twl6030_gpadc_get_raw()
460 dev_dbg(gpadc->dev, "unable to read register 0x%X\n", reg); in twl6030_gpadc_get_raw()
465 dev_dbg(gpadc->dev, "GPADC raw code: %d", raw_code); in twl6030_gpadc_get_raw()
467 if (twl6030_channel_calibrated(gpadc->pdata, channel)) in twl6030_gpadc_get_raw()
468 *res = twl6030_gpadc_make_correction(gpadc, channel, raw_code); in twl6030_gpadc_get_raw()
475 static int twl6030_gpadc_get_processed(struct twl6030_gpadc_data *gpadc, in twl6030_gpadc_get_processed() argument
478 const struct twl6030_ideal_code *ideal = gpadc->pdata->ideal; in twl6030_gpadc_get_processed()
484 ret = twl6030_gpadc_get_raw(gpadc, channel, &corrected_code); in twl6030_gpadc_get_processed()
488 i = twl6030_gpadc_lookup(ideal, channel, gpadc->pdata->nchannels); in twl6030_gpadc_get_processed()
490 gpadc->twl6030_cal_tbl[i].gain; in twl6030_gpadc_get_processed()
495 dev_dbg(gpadc->dev, "GPADC corrected code: %d", corrected_code); in twl6030_gpadc_get_processed()
496 dev_dbg(gpadc->dev, "GPADC value: %d", channel_value); in twl6030_gpadc_get_processed()
507 struct twl6030_gpadc_data *gpadc = iio_priv(indio_dev); in twl6030_gpadc_read_raw() local
511 mutex_lock(&gpadc->lock); in twl6030_gpadc_read_raw()
513 ret = gpadc->pdata->start_conversion(chan->channel); in twl6030_gpadc_read_raw()
515 dev_err(gpadc->dev, "failed to start conversion\n"); in twl6030_gpadc_read_raw()
520 &gpadc->irq_complete, msecs_to_jiffies(5000)); in twl6030_gpadc_read_raw()
531 ret = twl6030_gpadc_get_raw(gpadc, chan->channel, val); in twl6030_gpadc_read_raw()
536 ret = twl6030_gpadc_get_processed(gpadc, chan->channel, val); in twl6030_gpadc_read_raw()
544 mutex_unlock(&gpadc->lock); in twl6030_gpadc_read_raw()
560 static void twl6030_calibrate_channel(struct twl6030_gpadc_data *gpadc, in twl6030_calibrate_channel() argument
564 const struct twl6030_ideal_code *ideal = gpadc->pdata->ideal; in twl6030_calibrate_channel()
566 i = twl6030_gpadc_lookup(ideal, channel, gpadc->pdata->nchannels); in twl6030_calibrate_channel()
581 gpadc->twl6030_cal_tbl[i].gain = gain; in twl6030_calibrate_channel()
582 gpadc->twl6030_cal_tbl[i].gain_error = k; in twl6030_calibrate_channel()
583 gpadc->twl6030_cal_tbl[i].offset_error = b; in twl6030_calibrate_channel()
585 dev_dbg(gpadc->dev, "GPADC d1 for Chn: %d = %d\n", channel, d1); in twl6030_calibrate_channel()
586 dev_dbg(gpadc->dev, "GPADC d2 for Chn: %d = %d\n", channel, d2); in twl6030_calibrate_channel()
587 dev_dbg(gpadc->dev, "GPADC x1 for Chn: %d = %d\n", channel, x1); in twl6030_calibrate_channel()
588 dev_dbg(gpadc->dev, "GPADC x2 for Chn: %d = %d\n", channel, x2); in twl6030_calibrate_channel()
589 dev_dbg(gpadc->dev, "GPADC Gain for Chn: %d = %d\n", channel, gain); in twl6030_calibrate_channel()
590 dev_dbg(gpadc->dev, "GPADC k for Chn: %d = %d\n", channel, k); in twl6030_calibrate_channel()
591 dev_dbg(gpadc->dev, "GPADC b for Chn: %d = %d\n", channel, b); in twl6030_calibrate_channel()
608 static int twl6030_calibration(struct twl6030_gpadc_data *gpadc) in twl6030_calibration() argument
625 dev_err(gpadc->dev, "calibration failed\n"); in twl6030_calibration()
675 twl6030_calibrate_channel(gpadc, chn, d1, d2); in twl6030_calibration()
695 static int twl6032_calibration(struct twl6030_gpadc_data *gpadc) in twl6032_calibration() argument
704 dev_err(gpadc->dev, "calibration failed\n"); in twl6032_calibration()
783 twl6030_calibrate_channel(gpadc, chn, d1, d2); in twl6032_calibration()
868 struct twl6030_gpadc_data *gpadc; in twl6030_gpadc_probe() local
881 indio_dev = devm_iio_device_alloc(dev, sizeof(*gpadc)); in twl6030_gpadc_probe()
885 gpadc = iio_priv(indio_dev); in twl6030_gpadc_probe()
887 gpadc->twl6030_cal_tbl = devm_kcalloc(dev, in twl6030_gpadc_probe()
889 sizeof(*gpadc->twl6030_cal_tbl), in twl6030_gpadc_probe()
891 if (!gpadc->twl6030_cal_tbl) in twl6030_gpadc_probe()
894 gpadc->dev = dev; in twl6030_gpadc_probe()
895 gpadc->pdata = pdata; in twl6030_gpadc_probe()
898 mutex_init(&gpadc->lock); in twl6030_gpadc_probe()
899 init_completion(&gpadc->irq_complete); in twl6030_gpadc_probe()
901 ret = pdata->calibrate(gpadc); in twl6030_gpadc_probe()