@@ -225,6 +225,7 @@ struct at91_adc_trigger {
225
225
char * name ;
226
226
unsigned int trgmod_value ;
227
227
unsigned int edge_type ;
228
+ bool hw_trig ;
228
229
};
229
230
230
231
struct at91_adc_state {
@@ -254,16 +255,25 @@ static const struct at91_adc_trigger at91_adc_trigger_list[] = {
254
255
.name = "external_rising" ,
255
256
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_EXT_TRIG_RISE ,
256
257
.edge_type = IRQ_TYPE_EDGE_RISING ,
258
+ .hw_trig = true,
257
259
},
258
260
{
259
261
.name = "external_falling" ,
260
262
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_EXT_TRIG_FALL ,
261
263
.edge_type = IRQ_TYPE_EDGE_FALLING ,
264
+ .hw_trig = true,
262
265
},
263
266
{
264
267
.name = "external_any" ,
265
268
.trgmod_value = AT91_SAMA5D2_TRGR_TRGMOD_EXT_TRIG_ANY ,
266
269
.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,
267
277
},
268
278
};
269
279
@@ -597,7 +607,7 @@ static int at91_adc_probe(struct platform_device *pdev)
597
607
struct at91_adc_state * st ;
598
608
struct resource * res ;
599
609
int ret , i ;
600
- u32 edge_type ;
610
+ u32 edge_type = IRQ_TYPE_NONE ;
601
611
602
612
indio_dev = devm_iio_device_alloc (& pdev -> dev , sizeof (* st ));
603
613
if (!indio_dev )
@@ -641,14 +651,14 @@ static int at91_adc_probe(struct platform_device *pdev)
641
651
ret = of_property_read_u32 (pdev -> dev .of_node ,
642
652
"atmel,trigger-edge-type" , & edge_type );
643
653
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" );
647
656
}
648
657
649
658
st -> selected_trig = NULL ;
650
659
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 ++ )
652
662
if (at91_adc_trigger_list [i ].edge_type == edge_type ) {
653
663
st -> selected_trig = & at91_adc_trigger_list [i ];
654
664
break ;
@@ -717,24 +727,27 @@ static int at91_adc_probe(struct platform_device *pdev)
717
727
718
728
platform_set_drvdata (pdev , indio_dev );
719
729
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
+ }
725
736
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
+ }
730
742
}
731
743
732
744
ret = iio_device_register (indio_dev );
733
745
if (ret < 0 )
734
746
goto per_clk_disable_unprepare ;
735
747
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 );
738
751
739
752
dev_info (& pdev -> dev , "version: %x\n" ,
740
753
readl_relaxed (st -> base + AT91_SAMA5D2_VERSION ));
0 commit comments