forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/iio/adc/ti_am335x_adc.c
....@@ -1,7 +1,7 @@
11 /*
22 * TI ADC MFD driver
33 *
4
- * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
4
+ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
55 *
66 * This program is free software; you can redistribute it and/or
77 * modify it under the terms of the GNU General Public License as
....@@ -142,7 +142,10 @@
142142 stepconfig |= STEPCONFIG_MODE_SWCNT;
143143
144144 tiadc_writel(adc_dev, REG_STEPCONFIG(steps),
145
- stepconfig | STEPCONFIG_INP(chan));
145
+ stepconfig | STEPCONFIG_INP(chan) |
146
+ STEPCONFIG_INM_ADCREFM |
147
+ STEPCONFIG_RFP_VREFP |
148
+ STEPCONFIG_RFM_VREFN);
146149
147150 if (adc_dev->open_delay[i] > STEPDELAY_OPEN_MASK) {
148151 dev_warn(dev, "chan %d open delay truncating to 0x3FFFF\n",
....@@ -291,7 +294,7 @@
291294 static int tiadc_buffer_preenable(struct iio_dev *indio_dev)
292295 {
293296 struct tiadc_device *adc_dev = iio_priv(indio_dev);
294
- int i, fifo1count, read;
297
+ int i, fifo1count;
295298
296299 tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
297300 IRQENB_FIFO1OVRRUN |
....@@ -300,7 +303,7 @@
300303 /* Flush FIFO. Needed in corner cases in simultaneous tsc/adc use */
301304 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
302305 for (i = 0; i < fifo1count; i++)
303
- read = tiadc_readl(adc_dev, REG_FIFO1);
306
+ tiadc_readl(adc_dev, REG_FIFO1);
304307
305308 return 0;
306309 }
....@@ -340,7 +343,7 @@
340343 {
341344 struct tiadc_device *adc_dev = iio_priv(indio_dev);
342345 struct tiadc_dma *dma = &adc_dev->dma;
343
- int fifo1count, i, read;
346
+ int fifo1count, i;
344347
345348 tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
346349 IRQENB_FIFO1OVRRUN | IRQENB_FIFO1UNDRFLW));
....@@ -355,7 +358,7 @@
355358 /* Flush FIFO of leftover data in the time it takes to disable adc */
356359 fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
357360 for (i = 0; i < fifo1count; i++)
358
- read = tiadc_readl(adc_dev, REG_FIFO1);
361
+ tiadc_readl(adc_dev, REG_FIFO1);
359362
360363 return 0;
361364 }
....@@ -374,7 +377,8 @@
374377 .postdisable = &tiadc_buffer_postdisable,
375378 };
376379
377
-static int tiadc_iio_buffered_hardware_setup(struct iio_dev *indio_dev,
380
+static int tiadc_iio_buffered_hardware_setup(struct device *dev,
381
+ struct iio_dev *indio_dev,
378382 irqreturn_t (*pollfunc_bh)(int irq, void *p),
379383 irqreturn_t (*pollfunc_th)(int irq, void *p),
380384 int irq,
....@@ -384,35 +388,22 @@
384388 struct iio_buffer *buffer;
385389 int ret;
386390
387
- buffer = iio_kfifo_allocate();
391
+ buffer = devm_iio_kfifo_allocate(dev);
388392 if (!buffer)
389393 return -ENOMEM;
390394
391395 iio_device_attach_buffer(indio_dev, buffer);
392396
393
- ret = request_threaded_irq(irq, pollfunc_th, pollfunc_bh,
397
+ ret = devm_request_threaded_irq(dev, irq, pollfunc_th, pollfunc_bh,
394398 flags, indio_dev->name, indio_dev);
395399 if (ret)
396
- goto error_kfifo_free;
400
+ return ret;
397401
398402 indio_dev->setup_ops = setup_ops;
399403 indio_dev->modes |= INDIO_BUFFER_SOFTWARE;
400404
401405 return 0;
402
-
403
-error_kfifo_free:
404
- iio_kfifo_free(indio_dev->buffer);
405
- return ret;
406406 }
407
-
408
-static void tiadc_iio_buffered_hardware_remove(struct iio_dev *indio_dev)
409
-{
410
- struct tiadc_device *adc_dev = iio_priv(indio_dev);
411
-
412
- free_irq(adc_dev->mfd_tscadc->irq, indio_dev);
413
- iio_kfifo_free(indio_dev->buffer);
414
-}
415
-
416407
417408 static const char * const chan_name_ain[] = {
418409 "AIN0",
....@@ -425,7 +416,8 @@
425416 "AIN7",
426417 };
427418
428
-static int tiadc_channel_init(struct iio_dev *indio_dev, int channels)
419
+static int tiadc_channel_init(struct device *dev, struct iio_dev *indio_dev,
420
+ int channels)
429421 {
430422 struct tiadc_device *adc_dev = iio_priv(indio_dev);
431423 struct iio_chan_spec *chan_array;
....@@ -433,7 +425,8 @@
433425 int i;
434426
435427 indio_dev->num_channels = channels;
436
- chan_array = kcalloc(channels, sizeof(*chan_array), GFP_KERNEL);
428
+ chan_array = devm_kcalloc(dev, channels, sizeof(*chan_array),
429
+ GFP_KERNEL);
437430 if (chan_array == NULL)
438431 return -ENOMEM;
439432
....@@ -454,11 +447,6 @@
454447 indio_dev->channels = chan_array;
455448
456449 return 0;
457
-}
458
-
459
-static void tiadc_channels_remove(struct iio_dev *indio_dev)
460
-{
461
- kfree(indio_dev->channels);
462450 }
463451
464452 static int tiadc_read_raw(struct iio_dev *indio_dev,
....@@ -623,7 +611,6 @@
623611 adc_dev->mfd_tscadc = ti_tscadc_dev_get(pdev);
624612 tiadc_parse_dt(pdev, adc_dev);
625613
626
- indio_dev->dev.parent = &pdev->dev;
627614 indio_dev->name = dev_name(&pdev->dev);
628615 indio_dev->modes = INDIO_DIRECT_MODE;
629616 indio_dev->info = &tiadc_info;
....@@ -632,11 +619,11 @@
632619 tiadc_writel(adc_dev, REG_FIFO1THR, FIFO1_THRESHOLD);
633620 mutex_init(&adc_dev->fifo1_lock);
634621
635
- err = tiadc_channel_init(indio_dev, adc_dev->channels);
622
+ err = tiadc_channel_init(&pdev->dev, indio_dev, adc_dev->channels);
636623 if (err < 0)
637624 return err;
638625
639
- err = tiadc_iio_buffered_hardware_setup(indio_dev,
626
+ err = tiadc_iio_buffered_hardware_setup(&pdev->dev, indio_dev,
640627 &tiadc_worker_h,
641628 &tiadc_irq_h,
642629 adc_dev->mfd_tscadc->irq,
....@@ -661,9 +648,7 @@
661648 err_dma:
662649 iio_device_unregister(indio_dev);
663650 err_buffer_unregister:
664
- tiadc_iio_buffered_hardware_remove(indio_dev);
665651 err_free_channels:
666
- tiadc_channels_remove(indio_dev);
667652 return err;
668653 }
669654
....@@ -680,8 +665,6 @@
680665 dma_release_channel(dma->chan);
681666 }
682667 iio_device_unregister(indio_dev);
683
- tiadc_iio_buffered_hardware_remove(indio_dev);
684
- tiadc_channels_remove(indio_dev);
685668
686669 step_en = get_adc_step_mask(adc_dev);
687670 am335x_tsc_se_clr(adc_dev->mfd_tscadc, step_en);
....@@ -693,16 +676,12 @@
693676 {
694677 struct iio_dev *indio_dev = dev_get_drvdata(dev);
695678 struct tiadc_device *adc_dev = iio_priv(indio_dev);
696
- struct ti_tscadc_dev *tscadc_dev;
697679 unsigned int idle;
698680
699
- tscadc_dev = ti_tscadc_dev_get(to_platform_device(dev));
700
- if (!device_may_wakeup(tscadc_dev->dev)) {
701
- idle = tiadc_readl(adc_dev, REG_CTRL);
702
- idle &= ~(CNTRLREG_TSCSSENB);
703
- tiadc_writel(adc_dev, REG_CTRL, (idle |
704
- CNTRLREG_POWERDOWN));
705
- }
681
+ idle = tiadc_readl(adc_dev, REG_CTRL);
682
+ idle &= ~(CNTRLREG_TSCSSENB);
683
+ tiadc_writel(adc_dev, REG_CTRL, (idle |
684
+ CNTRLREG_POWERDOWN));
706685
707686 return 0;
708687 }