Lines Matching defs:madc
11 * Based on twl4030-madc.c
119 * struct twl4030_madc_request - madc request packet for channel conversion
154 * struct twl4030_madc_data - a container for madc info
155 * @dev: Pointer to device structure for madc
157 * @usb3v1: Pointer to bias regulator for madc
179 struct twl4030_madc_data *madc = iio_priv(iio_dev);
183 req.method = madc->use_second_irq ? TWL4030_MADC_SW2 : TWL4030_MADC_SW1;
297 * @madc: pointer to struct twl4030_madc_data
302 static int twl4030_madc_channel_raw_read(struct twl4030_madc_data *madc, u8 reg)
312 dev_err(madc->dev, "unable to read register 0x%X\n", reg);
365 * @madc - pointer to twl4030_madc_data struct
373 static int twl4030_madc_read_channels(struct twl4030_madc_data *madc,
384 buf[i] = twl4030_madc_channel_raw_read(madc, reg);
386 dev_err(madc->dev, "Unable to read register 0x%X\n",
398 dev_err(madc->dev, "err reading current\n");
408 dev_err(madc->dev, "err reading temperature\n");
436 * @madc - pointer to twl4030_madc_data struct
442 static int twl4030_madc_disable_irq(struct twl4030_madc_data *madc, u8 id)
447 ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &val, madc->imr);
449 dev_err(madc->dev, "unable to read imr register 0x%X\n",
450 madc->imr);
454 ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, val, madc->imr);
456 dev_err(madc->dev,
457 "unable to write imr register 0x%X\n", madc->imr);
466 struct twl4030_madc_data *madc = _madc;
472 mutex_lock(&madc->lock);
473 ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &isr_val, madc->isr);
475 dev_err(madc->dev, "unable to read isr register 0x%X\n",
476 madc->isr);
479 ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &imr_val, madc->imr);
481 dev_err(madc->dev, "unable to read imr register 0x%X\n",
482 madc->imr);
489 ret = twl4030_madc_disable_irq(madc, i);
491 dev_dbg(madc->dev, "Disable interrupt failed %d\n", i);
492 madc->requests[i].result_pending = true;
495 r = &madc->requests[i];
501 twl4030_madc_read_channels(madc, method->rbase,
507 mutex_unlock(&madc->lock);
517 r = &madc->requests[i];
522 twl4030_madc_read_channels(madc, method->rbase,
528 mutex_unlock(&madc->lock);
534 * Function which enables the madc conversion
536 * @madc - pointer to twl4030_madc_data struct
541 static int twl4030_madc_start_conversion(struct twl4030_madc_data *madc,
554 dev_err(madc->dev, "unable to write ctrl register 0x%X\n",
564 * @madc - pointer to twl4030_madc_data struct
569 static int twl4030_madc_wait_conversion_ready(struct twl4030_madc_data *madc,
582 dev_err(madc->dev,
591 dev_err(madc->dev, "conversion timeout!\n");
669 * @madc: pointer to twl4030_madc_data struct
678 static int twl4030_madc_set_current_generator(struct twl4030_madc_data *madc,
688 dev_err(madc->dev, "unable to read BCICTL1 reg 0x%X",
702 dev_err(madc->dev, "unable to write BCICTL1 reg 0x%X\n",
712 * @madc - pointer to twl4030_madc_data struct
716 static int twl4030_madc_set_power(struct twl4030_madc_data *madc, int on)
724 dev_err(madc->dev, "unable to read madc ctrl1 reg 0x%X\n",
734 dev_err(madc->dev, "unable to write madc ctrl1 reg 0x%X\n",
747 struct twl4030_madc_data *madc;
759 iio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*madc));
765 madc = iio_priv(iio_dev);
766 madc->dev = &pdev->dev;
780 madc->use_second_irq = (pdata->irq_line != 1);
782 madc->use_second_irq = of_property_read_bool(np,
783 "ti,system-uses-second-madc-irq");
785 madc->imr = madc->use_second_irq ? TWL4030_MADC_IMR2 :
787 madc->isr = madc->use_second_irq ? TWL4030_MADC_ISR2 :
790 ret = twl4030_madc_set_power(madc, 1);
793 ret = twl4030_madc_set_current_generator(madc, 0, 1);
835 mutex_init(&madc->lock);
841 "twl4030_madc", madc);
846 twl4030_madc = madc;
866 madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1");
867 if (IS_ERR(madc->usb3v1)) {
872 ret = regulator_enable(madc->usb3v1);
874 dev_err(madc->dev, "could not enable 3v1 bias regulator\n");
887 regulator_disable(madc->usb3v1);
889 twl4030_madc_set_current_generator(madc, 0, 0);
891 twl4030_madc_set_power(madc, 0);
898 struct twl4030_madc_data *madc = iio_priv(iio_dev);
902 twl4030_madc_set_current_generator(madc, 0, 0);
903 twl4030_madc_set_power(madc, 0);
905 regulator_disable(madc->usb3v1);
912 { .compatible = "ti,twl4030-madc", },