1 /* 2 * Copyright (C) 2011 Free Electrons 3 * 4 * Licensed under the GPLv2 or later. 5 */ 6 7 #ifndef _AT91_ADC_H_ 8 #define _AT91_ADC_H_ 9 10 /** 11 * struct at91_adc_reg_desc - Various informations relative to registers 12 * @channel_base: Base offset for the channel data registers 13 * @drdy_mask: Mask of the DRDY field in the relevant registers 14 (Interruptions registers mostly) 15 * @status_register: Offset of the Interrupt Status Register 16 * @trigger_register: Offset of the Trigger setup register 17 */ 18 struct at91_adc_reg_desc { 19 u8 channel_base; 20 u32 drdy_mask; 21 u8 status_register; 22 u8 trigger_register; 23 }; 24 25 /** 26 * struct at91_adc_trigger - description of triggers 27 * @name: name of the trigger advertised to the user 28 * @value: value to set in the ADC's trigger setup register 29 to enable the trigger 30 * @is_external: Does the trigger rely on an external pin? 31 */ 32 struct at91_adc_trigger { 33 const char *name; 34 u8 value; 35 bool is_external; 36 }; 37 38 /** 39 * struct at91_adc_data - platform data for ADC driver 40 * @channels_used: channels in use on the board as a bitmask 41 * @num_channels: global number of channels available on the board 42 * @registers: Registers definition on the board 43 * @startup_time: startup time of the ADC in microseconds 44 * @trigger_list: Triggers available in the ADC 45 * @trigger_number: Number of triggers available in the ADC 46 * @use_external_triggers: does the board has external triggers availables 47 * @vref: Reference voltage for the ADC in millivolts 48 */ 49 struct at91_adc_data { 50 unsigned long channels_used; 51 u8 num_channels; 52 struct at91_adc_reg_desc *registers; 53 u8 startup_time; 54 struct at91_adc_trigger *trigger_list; 55 u8 trigger_number; 56 bool use_external_triggers; 57 u16 vref; 58 }; 59 60 extern void __init at91_add_device_adc(struct at91_adc_data *data); 61 #endif 62