iio: at91: Use different prescal, startup mask in MR for different IP
For at91 boards, there are different IPs for adc. Different IPs has different STARTUP & PRESCAL mask in ADC_MR. Signed-off-by: Josh Wu <josh.wu@atmel.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
e1811f97ba
commit
9120c0bea9
3 changed files with 18 additions and 4 deletions
|
@ -28,9 +28,12 @@
|
|||
#define AT91_ADC_TRGSEL_EXTERNAL (6 << 1)
|
||||
#define AT91_ADC_LOWRES (1 << 4) /* Low Resolution */
|
||||
#define AT91_ADC_SLEEP (1 << 5) /* Sleep Mode */
|
||||
#define AT91_ADC_PRESCAL (0x3f << 8) /* Prescalar Rate Selection */
|
||||
#define AT91_ADC_PRESCAL_9260 (0x3f << 8) /* Prescalar Rate Selection */
|
||||
#define AT91_ADC_PRESCAL_9G45 (0xff << 8)
|
||||
#define AT91_ADC_PRESCAL_(x) ((x) << 8)
|
||||
#define AT91_ADC_STARTUP (0x1f << 16) /* Startup Up Time */
|
||||
#define AT91_ADC_STARTUP_9260 (0x1f << 16) /* Startup Up Time */
|
||||
#define AT91_ADC_STARTUP_9G45 (0x7f << 16)
|
||||
#define AT91_ADC_STARTUP_9X5 (0xf << 16)
|
||||
#define AT91_ADC_STARTUP_(x) ((x) << 16)
|
||||
#define AT91_ADC_SHTIM (0xf << 24) /* Sample & Hold Time */
|
||||
#define AT91_ADC_SHTIM_(x) ((x) << 24)
|
||||
|
|
|
@ -672,8 +672,8 @@ static int at91_adc_probe(struct platform_device *pdev)
|
|||
shtim = round_up((st->sample_hold_time * adc_clk /
|
||||
1000000) - 1, 1);
|
||||
|
||||
reg = AT91_ADC_PRESCAL_(prsc) & AT91_ADC_PRESCAL;
|
||||
reg |= AT91_ADC_STARTUP_(ticks) & AT91_ADC_STARTUP;
|
||||
reg = AT91_ADC_PRESCAL_(prsc) & st->registers->mr_prescal_mask;
|
||||
reg |= AT91_ADC_STARTUP_(ticks) & st->registers->mr_startup_mask;
|
||||
if (st->low_res)
|
||||
reg |= AT91_ADC_LOWRES;
|
||||
if (st->sleep_mode)
|
||||
|
@ -746,6 +746,8 @@ static struct at91_adc_caps at91sam9260_caps = {
|
|||
.drdy_mask = AT91_ADC_DRDY,
|
||||
.status_register = AT91_ADC_SR,
|
||||
.trigger_register = AT91_ADC_TRGR_9260,
|
||||
.mr_prescal_mask = AT91_ADC_PRESCAL_9260,
|
||||
.mr_startup_mask = AT91_ADC_STARTUP_9260,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -755,6 +757,8 @@ static struct at91_adc_caps at91sam9g45_caps = {
|
|||
.drdy_mask = AT91_ADC_DRDY,
|
||||
.status_register = AT91_ADC_SR,
|
||||
.trigger_register = AT91_ADC_TRGR_9G45,
|
||||
.mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
|
||||
.mr_startup_mask = AT91_ADC_STARTUP_9G45,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -764,6 +768,9 @@ static struct at91_adc_caps at91sam9x5_caps = {
|
|||
.drdy_mask = AT91_ADC_SR_DRDY_9X5,
|
||||
.status_register = AT91_ADC_SR_9X5,
|
||||
.trigger_register = AT91_ADC_TRGR_9X5,
|
||||
/* prescal mask is same as 9G45 */
|
||||
.mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
|
||||
.mr_startup_mask = AT91_ADC_STARTUP_9X5,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -14,12 +14,16 @@
|
|||
(Interruptions registers mostly)
|
||||
* @status_register: Offset of the Interrupt Status Register
|
||||
* @trigger_register: Offset of the Trigger setup register
|
||||
* @mr_prescal_mask: Mask of the PRESCAL field in the adc MR register
|
||||
* @mr_startup_mask: Mask of the STARTUP field in the adc MR register
|
||||
*/
|
||||
struct at91_adc_reg_desc {
|
||||
u8 channel_base;
|
||||
u32 drdy_mask;
|
||||
u8 status_register;
|
||||
u8 trigger_register;
|
||||
u32 mr_prescal_mask;
|
||||
u32 mr_startup_mask;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue