Skip to content

Commit ca4c302

Browse files
ehristevjic23
authored andcommitted
iio: adc: at91-sama5d2_adc: fix probe error on missing trigger property
This fix allows platforms to probe correctly even if the trigger edge property is missing. The hardware trigger will no longer be registered in the sybsystem Preserves backwards compatibility with the support that was in the driver before the hardware trigger. https://storage.kernelci.org/mainline/master/v4.14-rc2-255-g74d83ec2b734/arm/sama5_defconfig/lab-free-electrons/boot-at91-sama5d2_xplained.txt Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> Fixes: 5e1a1da ("iio: adc: at91-sama5d2_adc: add hw trigger and buffer support") Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 5151b4a commit ca4c302

File tree

1 file changed

+29
-16
lines changed

1 file changed

+29
-16
lines changed

drivers/iio/adc/at91-sama5d2_adc.c

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ struct at91_adc_trigger {
225225
char *name;
226226
unsigned int trgmod_value;
227227
unsigned int edge_type;
228+
bool hw_trig;
228229
};
229230

230231
struct at91_adc_state {
@@ -254,16 +255,25 @@ static const struct at91_adc_trigger at91_adc_trigger_list[] = {
254255
.name = "external_rising",
255256
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_EXT_TRIG_RISE,
256257
.edge_type = IRQ_TYPE_EDGE_RISING,
258+
.hw_trig = true,
257259
},
258260
{
259261
.name = "external_falling",
260262
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_EXT_TRIG_FALL,
261263
.edge_type = IRQ_TYPE_EDGE_FALLING,
264+
.hw_trig = true,
262265
},
263266
{
264267
.name = "external_any",
265268
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_EXT_TRIG_ANY,
266269
.edge_type = IRQ_TYPE_EDGE_BOTH,
270+
.hw_trig = true,
271+
},
272+
{
273+
.name = "software",
274+
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_NO_TRIGGER,
275+
.edge_type = IRQ_TYPE_NONE,
276+
.hw_trig = false,
267277
},
268278
};
269279

@@ -597,7 +607,7 @@ static int at91_adc_probe(struct platform_device *pdev)
597607
struct at91_adc_state *st;
598608
struct resource *res;
599609
int ret, i;
600-
u32 edge_type;
610+
u32 edge_type = IRQ_TYPE_NONE;
601611

602612
indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*st));
603613
if (!indio_dev)
@@ -641,14 +651,14 @@ static int at91_adc_probe(struct platform_device *pdev)
641651
ret = of_property_read_u32(pdev->dev.of_node,
642652
"atmel,trigger-edge-type", &edge_type);
643653
if (ret) {
644-
dev_err(&pdev->dev,
645-
"invalid or missing value for atmel,trigger-edge-type\n");
646-
return ret;
654+
dev_dbg(&pdev->dev,
655+
"atmel,trigger-edge-type not specified, only software trigger available\n");
647656
}
648657

649658
st->selected_trig = NULL;
650659

651-
for (i = 0; i < AT91_SAMA5D2_HW_TRIG_CNT; i++)
660+
/* find the right trigger, or no trigger at all */
661+
for (i = 0; i < AT91_SAMA5D2_HW_TRIG_CNT + 1; i++)
652662
if (at91_adc_trigger_list[i].edge_type == edge_type) {
653663
st->selected_trig = &at91_adc_trigger_list[i];
654664
break;
@@ -717,24 +727,27 @@ static int at91_adc_probe(struct platform_device *pdev)
717727

718728
platform_set_drvdata(pdev, indio_dev);
719729

720-
ret = at91_adc_buffer_init(indio_dev);
721-
if (ret < 0) {
722-
dev_err(&pdev->dev, "couldn't initialize the buffer.\n");
723-
goto per_clk_disable_unprepare;
724-
}
730+
if (st->selected_trig->hw_trig) {
731+
ret = at91_adc_buffer_init(indio_dev);
732+
if (ret < 0) {
733+
dev_err(&pdev->dev, "couldn't initialize the buffer.\n");
734+
goto per_clk_disable_unprepare;
735+
}
725736

726-
ret = at91_adc_trigger_init(indio_dev);
727-
if (ret < 0) {
728-
dev_err(&pdev->dev, "couldn't setup the triggers.\n");
729-
goto per_clk_disable_unprepare;
737+
ret = at91_adc_trigger_init(indio_dev);
738+
if (ret < 0) {
739+
dev_err(&pdev->dev, "couldn't setup the triggers.\n");
740+
goto per_clk_disable_unprepare;
741+
}
730742
}
731743

732744
ret = iio_device_register(indio_dev);
733745
if (ret < 0)
734746
goto per_clk_disable_unprepare;
735747

736-
dev_info(&pdev->dev, "setting up trigger as %s\n",
737-
st->selected_trig->name);
748+
if (st->selected_trig->hw_trig)
749+
dev_info(&pdev->dev, "setting up trigger as %s\n",
750+
st->selected_trig->name);
738751

739752
dev_info(&pdev->dev, "version: %x\n",
740753
readl_relaxed(st->base + AT91_SAMA5D2_VERSION));

0 commit comments

Comments
 (0)