0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/bitfield.h>
0011 #include <linux/clk.h>
0012 #include <linux/completion.h>
0013 #include <linux/delay.h>
0014 #include <linux/iio/iio.h>
0015 #include <linux/interrupt.h>
0016 #include <linux/io.h>
0017 #include <linux/mod_devicetable.h>
0018 #include <linux/module.h>
0019 #include <linux/platform_device.h>
0020 #include <linux/pm_runtime.h>
0021 #include <linux/property.h>
0022 #include <linux/reset.h>
0023
0024 #define DRIVER_NAME "rzg2l-adc"
0025
0026 #define RZG2L_ADM(n) ((n) * 0x4)
0027 #define RZG2L_ADM0_ADCE BIT(0)
0028 #define RZG2L_ADM0_ADBSY BIT(1)
0029 #define RZG2L_ADM0_PWDWNB BIT(2)
0030 #define RZG2L_ADM0_SRESB BIT(15)
0031 #define RZG2L_ADM1_TRG BIT(0)
0032 #define RZG2L_ADM1_MS BIT(2)
0033 #define RZG2L_ADM1_BS BIT(4)
0034 #define RZG2L_ADM1_EGA_MASK GENMASK(13, 12)
0035 #define RZG2L_ADM2_CHSEL_MASK GENMASK(7, 0)
0036 #define RZG2L_ADM3_ADIL_MASK GENMASK(31, 24)
0037 #define RZG2L_ADM3_ADCMP_MASK GENMASK(23, 16)
0038 #define RZG2L_ADM3_ADCMP_E FIELD_PREP(RZG2L_ADM3_ADCMP_MASK, 0xe)
0039 #define RZG2L_ADM3_ADSMP_MASK GENMASK(15, 0)
0040
0041 #define RZG2L_ADINT 0x20
0042 #define RZG2L_ADINT_INTEN_MASK GENMASK(7, 0)
0043 #define RZG2L_ADINT_CSEEN BIT(16)
0044 #define RZG2L_ADINT_INTS BIT(31)
0045
0046 #define RZG2L_ADSTS 0x24
0047 #define RZG2L_ADSTS_CSEST BIT(16)
0048 #define RZG2L_ADSTS_INTST_MASK GENMASK(7, 0)
0049
0050 #define RZG2L_ADIVC 0x28
0051 #define RZG2L_ADIVC_DIVADC_MASK GENMASK(8, 0)
0052 #define RZG2L_ADIVC_DIVADC_4 FIELD_PREP(RZG2L_ADIVC_DIVADC_MASK, 0x4)
0053
0054 #define RZG2L_ADFIL 0x2c
0055
0056 #define RZG2L_ADCR(n) (0x30 + ((n) * 0x4))
0057 #define RZG2L_ADCR_AD_MASK GENMASK(11, 0)
0058
0059 #define RZG2L_ADSMP_DEFAULT_SAMPLING 0x578
0060
0061 #define RZG2L_ADC_MAX_CHANNELS 8
0062 #define RZG2L_ADC_CHN_MASK 0x7
0063 #define RZG2L_ADC_TIMEOUT usecs_to_jiffies(1 * 4)
0064
0065 struct rzg2l_adc_data {
0066 const struct iio_chan_spec *channels;
0067 u8 num_channels;
0068 };
0069
0070 struct rzg2l_adc {
0071 void __iomem *base;
0072 struct clk *pclk;
0073 struct clk *adclk;
0074 struct reset_control *presetn;
0075 struct reset_control *adrstn;
0076 struct completion completion;
0077 const struct rzg2l_adc_data *data;
0078 struct mutex lock;
0079 u16 last_val[RZG2L_ADC_MAX_CHANNELS];
0080 };
0081
0082 static const char * const rzg2l_adc_channel_name[] = {
0083 "adc0",
0084 "adc1",
0085 "adc2",
0086 "adc3",
0087 "adc4",
0088 "adc5",
0089 "adc6",
0090 "adc7",
0091 };
0092
0093 static unsigned int rzg2l_adc_readl(struct rzg2l_adc *adc, u32 reg)
0094 {
0095 return readl(adc->base + reg);
0096 }
0097
0098 static void rzg2l_adc_writel(struct rzg2l_adc *adc, unsigned int reg, u32 val)
0099 {
0100 writel(val, adc->base + reg);
0101 }
0102
0103 static void rzg2l_adc_pwr(struct rzg2l_adc *adc, bool on)
0104 {
0105 u32 reg;
0106
0107 reg = rzg2l_adc_readl(adc, RZG2L_ADM(0));
0108 if (on)
0109 reg |= RZG2L_ADM0_PWDWNB;
0110 else
0111 reg &= ~RZG2L_ADM0_PWDWNB;
0112 rzg2l_adc_writel(adc, RZG2L_ADM(0), reg);
0113 udelay(2);
0114 }
0115
0116 static void rzg2l_adc_start_stop(struct rzg2l_adc *adc, bool start)
0117 {
0118 int timeout = 5;
0119 u32 reg;
0120
0121 reg = rzg2l_adc_readl(adc, RZG2L_ADM(0));
0122 if (start)
0123 reg |= RZG2L_ADM0_ADCE;
0124 else
0125 reg &= ~RZG2L_ADM0_ADCE;
0126 rzg2l_adc_writel(adc, RZG2L_ADM(0), reg);
0127
0128 if (start)
0129 return;
0130
0131 do {
0132 usleep_range(100, 200);
0133 reg = rzg2l_adc_readl(adc, RZG2L_ADM(0));
0134 timeout--;
0135 if (!timeout) {
0136 pr_err("%s stopping ADC timed out\n", __func__);
0137 break;
0138 }
0139 } while (((reg & RZG2L_ADM0_ADBSY) || (reg & RZG2L_ADM0_ADCE)));
0140 }
0141
0142 static void rzg2l_set_trigger(struct rzg2l_adc *adc)
0143 {
0144 u32 reg;
0145
0146
0147
0148
0149
0150
0151
0152
0153 reg = rzg2l_adc_readl(adc, RZG2L_ADM(1));
0154 reg &= ~RZG2L_ADM1_EGA_MASK;
0155 reg &= ~RZG2L_ADM1_BS;
0156 reg &= ~RZG2L_ADM1_TRG;
0157 reg |= RZG2L_ADM1_MS;
0158 rzg2l_adc_writel(adc, RZG2L_ADM(1), reg);
0159 }
0160
0161 static int rzg2l_adc_conversion_setup(struct rzg2l_adc *adc, u8 ch)
0162 {
0163 u32 reg;
0164
0165 if (rzg2l_adc_readl(adc, RZG2L_ADM(0)) & RZG2L_ADM0_ADBSY)
0166 return -EBUSY;
0167
0168 rzg2l_set_trigger(adc);
0169
0170
0171 reg = rzg2l_adc_readl(adc, RZG2L_ADM(2));
0172 reg &= ~RZG2L_ADM2_CHSEL_MASK;
0173 reg |= BIT(ch);
0174 rzg2l_adc_writel(adc, RZG2L_ADM(2), reg);
0175
0176
0177
0178
0179
0180
0181
0182 reg = rzg2l_adc_readl(adc, RZG2L_ADINT);
0183 reg &= ~RZG2L_ADINT_INTS;
0184 reg &= ~RZG2L_ADINT_INTEN_MASK;
0185 reg |= (RZG2L_ADINT_CSEEN | BIT(ch));
0186 rzg2l_adc_writel(adc, RZG2L_ADINT, reg);
0187
0188 return 0;
0189 }
0190
0191 static int rzg2l_adc_set_power(struct iio_dev *indio_dev, bool on)
0192 {
0193 struct device *dev = indio_dev->dev.parent;
0194
0195 if (on)
0196 return pm_runtime_resume_and_get(dev);
0197
0198 return pm_runtime_put_sync(dev);
0199 }
0200
0201 static int rzg2l_adc_conversion(struct iio_dev *indio_dev, struct rzg2l_adc *adc, u8 ch)
0202 {
0203 int ret;
0204
0205 ret = rzg2l_adc_set_power(indio_dev, true);
0206 if (ret)
0207 return ret;
0208
0209 ret = rzg2l_adc_conversion_setup(adc, ch);
0210 if (ret) {
0211 rzg2l_adc_set_power(indio_dev, false);
0212 return ret;
0213 }
0214
0215 reinit_completion(&adc->completion);
0216
0217 rzg2l_adc_start_stop(adc, true);
0218
0219 if (!wait_for_completion_timeout(&adc->completion, RZG2L_ADC_TIMEOUT)) {
0220 rzg2l_adc_writel(adc, RZG2L_ADINT,
0221 rzg2l_adc_readl(adc, RZG2L_ADINT) & ~RZG2L_ADINT_INTEN_MASK);
0222 rzg2l_adc_start_stop(adc, false);
0223 rzg2l_adc_set_power(indio_dev, false);
0224 return -ETIMEDOUT;
0225 }
0226
0227 return rzg2l_adc_set_power(indio_dev, false);
0228 }
0229
0230 static int rzg2l_adc_read_raw(struct iio_dev *indio_dev,
0231 struct iio_chan_spec const *chan,
0232 int *val, int *val2, long mask)
0233 {
0234 struct rzg2l_adc *adc = iio_priv(indio_dev);
0235 int ret;
0236 u8 ch;
0237
0238 switch (mask) {
0239 case IIO_CHAN_INFO_RAW:
0240 if (chan->type != IIO_VOLTAGE)
0241 return -EINVAL;
0242
0243 mutex_lock(&adc->lock);
0244 ch = chan->channel & RZG2L_ADC_CHN_MASK;
0245 ret = rzg2l_adc_conversion(indio_dev, adc, ch);
0246 if (ret) {
0247 mutex_unlock(&adc->lock);
0248 return ret;
0249 }
0250 *val = adc->last_val[ch];
0251 mutex_unlock(&adc->lock);
0252
0253 return IIO_VAL_INT;
0254
0255 default:
0256 return -EINVAL;
0257 }
0258 }
0259
0260 static int rzg2l_adc_read_label(struct iio_dev *iio_dev,
0261 const struct iio_chan_spec *chan,
0262 char *label)
0263 {
0264 return sysfs_emit(label, "%s\n", rzg2l_adc_channel_name[chan->channel]);
0265 }
0266
0267 static const struct iio_info rzg2l_adc_iio_info = {
0268 .read_raw = rzg2l_adc_read_raw,
0269 .read_label = rzg2l_adc_read_label,
0270 };
0271
0272 static irqreturn_t rzg2l_adc_isr(int irq, void *dev_id)
0273 {
0274 struct rzg2l_adc *adc = dev_id;
0275 unsigned long intst;
0276 u32 reg;
0277 int ch;
0278
0279 reg = rzg2l_adc_readl(adc, RZG2L_ADSTS);
0280
0281
0282 if (reg & RZG2L_ADSTS_CSEST) {
0283 rzg2l_adc_writel(adc, RZG2L_ADSTS, reg);
0284 return IRQ_HANDLED;
0285 }
0286
0287 intst = reg & RZG2L_ADSTS_INTST_MASK;
0288 if (!intst)
0289 return IRQ_NONE;
0290
0291 for_each_set_bit(ch, &intst, RZG2L_ADC_MAX_CHANNELS)
0292 adc->last_val[ch] = rzg2l_adc_readl(adc, RZG2L_ADCR(ch)) & RZG2L_ADCR_AD_MASK;
0293
0294
0295 rzg2l_adc_writel(adc, RZG2L_ADSTS, reg);
0296
0297 complete(&adc->completion);
0298
0299 return IRQ_HANDLED;
0300 }
0301
0302 static int rzg2l_adc_parse_properties(struct platform_device *pdev, struct rzg2l_adc *adc)
0303 {
0304 struct iio_chan_spec *chan_array;
0305 struct fwnode_handle *fwnode;
0306 struct rzg2l_adc_data *data;
0307 unsigned int channel;
0308 int num_channels;
0309 int ret;
0310 u8 i;
0311
0312 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
0313 if (!data)
0314 return -ENOMEM;
0315
0316 num_channels = device_get_child_node_count(&pdev->dev);
0317 if (!num_channels) {
0318 dev_err(&pdev->dev, "no channel children\n");
0319 return -ENODEV;
0320 }
0321
0322 if (num_channels > RZG2L_ADC_MAX_CHANNELS) {
0323 dev_err(&pdev->dev, "num of channel children out of range\n");
0324 return -EINVAL;
0325 }
0326
0327 chan_array = devm_kcalloc(&pdev->dev, num_channels, sizeof(*chan_array),
0328 GFP_KERNEL);
0329 if (!chan_array)
0330 return -ENOMEM;
0331
0332 i = 0;
0333 device_for_each_child_node(&pdev->dev, fwnode) {
0334 ret = fwnode_property_read_u32(fwnode, "reg", &channel);
0335 if (ret) {
0336 fwnode_handle_put(fwnode);
0337 return ret;
0338 }
0339
0340 if (channel >= RZG2L_ADC_MAX_CHANNELS) {
0341 fwnode_handle_put(fwnode);
0342 return -EINVAL;
0343 }
0344
0345 chan_array[i].type = IIO_VOLTAGE;
0346 chan_array[i].indexed = 1;
0347 chan_array[i].channel = channel;
0348 chan_array[i].info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
0349 chan_array[i].datasheet_name = rzg2l_adc_channel_name[channel];
0350 i++;
0351 }
0352
0353 data->num_channels = num_channels;
0354 data->channels = chan_array;
0355 adc->data = data;
0356
0357 return 0;
0358 }
0359
0360 static int rzg2l_adc_hw_init(struct rzg2l_adc *adc)
0361 {
0362 int timeout = 5;
0363 u32 reg;
0364 int ret;
0365
0366 ret = clk_prepare_enable(adc->pclk);
0367 if (ret)
0368 return ret;
0369
0370
0371 reg = rzg2l_adc_readl(adc, RZG2L_ADM(0));
0372 reg |= RZG2L_ADM0_SRESB;
0373 rzg2l_adc_writel(adc, RZG2L_ADM(0), reg);
0374
0375 while (!(rzg2l_adc_readl(adc, RZG2L_ADM(0)) & RZG2L_ADM0_SRESB)) {
0376 if (!timeout) {
0377 ret = -EBUSY;
0378 goto exit_hw_init;
0379 }
0380 timeout--;
0381 usleep_range(100, 200);
0382 }
0383
0384
0385 reg = rzg2l_adc_readl(adc, RZG2L_ADIVC);
0386 reg &= ~RZG2L_ADIVC_DIVADC_MASK;
0387 reg |= RZG2L_ADIVC_DIVADC_4;
0388 rzg2l_adc_writel(adc, RZG2L_ADIVC, reg);
0389
0390
0391
0392
0393
0394
0395
0396 reg = rzg2l_adc_readl(adc, RZG2L_ADM(3));
0397 reg &= ~RZG2L_ADM3_ADIL_MASK;
0398 reg &= ~RZG2L_ADM3_ADCMP_MASK;
0399 reg &= ~RZG2L_ADM3_ADSMP_MASK;
0400 reg |= (RZG2L_ADM3_ADCMP_E | RZG2L_ADSMP_DEFAULT_SAMPLING);
0401 rzg2l_adc_writel(adc, RZG2L_ADM(3), reg);
0402
0403 exit_hw_init:
0404 clk_disable_unprepare(adc->pclk);
0405
0406 return ret;
0407 }
0408
0409 static void rzg2l_adc_pm_runtime_disable(void *data)
0410 {
0411 struct device *dev = data;
0412
0413 pm_runtime_disable(dev->parent);
0414 }
0415
0416 static void rzg2l_adc_pm_runtime_set_suspended(void *data)
0417 {
0418 struct device *dev = data;
0419
0420 pm_runtime_set_suspended(dev->parent);
0421 }
0422
0423 static void rzg2l_adc_reset_assert(void *data)
0424 {
0425 reset_control_assert(data);
0426 }
0427
0428 static int rzg2l_adc_probe(struct platform_device *pdev)
0429 {
0430 struct device *dev = &pdev->dev;
0431 struct iio_dev *indio_dev;
0432 struct rzg2l_adc *adc;
0433 int ret;
0434 int irq;
0435
0436 indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
0437 if (!indio_dev)
0438 return -ENOMEM;
0439
0440 adc = iio_priv(indio_dev);
0441
0442 ret = rzg2l_adc_parse_properties(pdev, adc);
0443 if (ret)
0444 return ret;
0445
0446 mutex_init(&adc->lock);
0447
0448 adc->base = devm_platform_ioremap_resource(pdev, 0);
0449 if (IS_ERR(adc->base))
0450 return PTR_ERR(adc->base);
0451
0452 adc->pclk = devm_clk_get(dev, "pclk");
0453 if (IS_ERR(adc->pclk)) {
0454 dev_err(dev, "Failed to get pclk");
0455 return PTR_ERR(adc->pclk);
0456 }
0457
0458 adc->adclk = devm_clk_get(dev, "adclk");
0459 if (IS_ERR(adc->adclk)) {
0460 dev_err(dev, "Failed to get adclk");
0461 return PTR_ERR(adc->adclk);
0462 }
0463
0464 adc->adrstn = devm_reset_control_get_exclusive(dev, "adrst-n");
0465 if (IS_ERR(adc->adrstn)) {
0466 dev_err(dev, "failed to get adrstn\n");
0467 return PTR_ERR(adc->adrstn);
0468 }
0469
0470 adc->presetn = devm_reset_control_get_exclusive(dev, "presetn");
0471 if (IS_ERR(adc->presetn)) {
0472 dev_err(dev, "failed to get presetn\n");
0473 return PTR_ERR(adc->presetn);
0474 }
0475
0476 ret = reset_control_deassert(adc->adrstn);
0477 if (ret) {
0478 dev_err(&pdev->dev, "failed to deassert adrstn pin, %d\n", ret);
0479 return ret;
0480 }
0481
0482 ret = devm_add_action_or_reset(&pdev->dev,
0483 rzg2l_adc_reset_assert, adc->adrstn);
0484 if (ret) {
0485 dev_err(&pdev->dev, "failed to register adrstn assert devm action, %d\n",
0486 ret);
0487 return ret;
0488 }
0489
0490 ret = reset_control_deassert(adc->presetn);
0491 if (ret) {
0492 dev_err(&pdev->dev, "failed to deassert presetn pin, %d\n", ret);
0493 return ret;
0494 }
0495
0496 ret = devm_add_action_or_reset(&pdev->dev,
0497 rzg2l_adc_reset_assert, adc->presetn);
0498 if (ret) {
0499 dev_err(&pdev->dev, "failed to register presetn assert devm action, %d\n",
0500 ret);
0501 return ret;
0502 }
0503
0504 ret = rzg2l_adc_hw_init(adc);
0505 if (ret) {
0506 dev_err(&pdev->dev, "failed to initialize ADC HW, %d\n", ret);
0507 return ret;
0508 }
0509
0510 irq = platform_get_irq(pdev, 0);
0511 if (irq < 0)
0512 return irq;
0513
0514 ret = devm_request_irq(dev, irq, rzg2l_adc_isr,
0515 0, dev_name(dev), adc);
0516 if (ret < 0)
0517 return ret;
0518
0519 init_completion(&adc->completion);
0520
0521 platform_set_drvdata(pdev, indio_dev);
0522
0523 indio_dev->name = DRIVER_NAME;
0524 indio_dev->info = &rzg2l_adc_iio_info;
0525 indio_dev->modes = INDIO_DIRECT_MODE;
0526 indio_dev->channels = adc->data->channels;
0527 indio_dev->num_channels = adc->data->num_channels;
0528
0529 pm_runtime_set_suspended(dev);
0530 ret = devm_add_action_or_reset(&pdev->dev,
0531 rzg2l_adc_pm_runtime_set_suspended, &indio_dev->dev);
0532 if (ret)
0533 return ret;
0534
0535 pm_runtime_enable(dev);
0536 ret = devm_add_action_or_reset(&pdev->dev,
0537 rzg2l_adc_pm_runtime_disable, &indio_dev->dev);
0538 if (ret)
0539 return ret;
0540
0541 return devm_iio_device_register(dev, indio_dev);
0542 }
0543
0544 static const struct of_device_id rzg2l_adc_match[] = {
0545 { .compatible = "renesas,rzg2l-adc",},
0546 { }
0547 };
0548 MODULE_DEVICE_TABLE(of, rzg2l_adc_match);
0549
0550 static int __maybe_unused rzg2l_adc_pm_runtime_suspend(struct device *dev)
0551 {
0552 struct iio_dev *indio_dev = dev_get_drvdata(dev);
0553 struct rzg2l_adc *adc = iio_priv(indio_dev);
0554
0555 rzg2l_adc_pwr(adc, false);
0556 clk_disable_unprepare(adc->adclk);
0557 clk_disable_unprepare(adc->pclk);
0558
0559 return 0;
0560 }
0561
0562 static int __maybe_unused rzg2l_adc_pm_runtime_resume(struct device *dev)
0563 {
0564 struct iio_dev *indio_dev = dev_get_drvdata(dev);
0565 struct rzg2l_adc *adc = iio_priv(indio_dev);
0566 int ret;
0567
0568 ret = clk_prepare_enable(adc->pclk);
0569 if (ret)
0570 return ret;
0571
0572 ret = clk_prepare_enable(adc->adclk);
0573 if (ret) {
0574 clk_disable_unprepare(adc->pclk);
0575 return ret;
0576 }
0577
0578 rzg2l_adc_pwr(adc, true);
0579
0580 return 0;
0581 }
0582
0583 static const struct dev_pm_ops rzg2l_adc_pm_ops = {
0584 SET_RUNTIME_PM_OPS(rzg2l_adc_pm_runtime_suspend,
0585 rzg2l_adc_pm_runtime_resume,
0586 NULL)
0587 };
0588
0589 static struct platform_driver rzg2l_adc_driver = {
0590 .probe = rzg2l_adc_probe,
0591 .driver = {
0592 .name = DRIVER_NAME,
0593 .of_match_table = rzg2l_adc_match,
0594 .pm = &rzg2l_adc_pm_ops,
0595 },
0596 };
0597
0598 module_platform_driver(rzg2l_adc_driver);
0599
0600 MODULE_AUTHOR("Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>");
0601 MODULE_DESCRIPTION("Renesas RZ/G2L ADC driver");
0602 MODULE_LICENSE("GPL v2");