pru: Move peripheral init from pru0 to pru1

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2017-07-12 20:02:23 -04:00
parent c105ff1c51
commit 3ac60b31a2
3 changed files with 37 additions and 45 deletions

View File

@@ -18,14 +18,46 @@
DECL_CONSTANT(ADC_MAX, 4095);
static void
adc_full_reset(void)
{
static uint8_t have_done_reset;
if (have_done_reset)
return;
have_done_reset = 1;
// Disable ADC
ADC->ctrl = (1<<2);
barrier();
// Clear registers
ADC->irqstatus = 0xffffffff;
ADC->irqenable_clr = 0xffffffff;
ADC->dmaenable_clr = 0xffffffff;
ADC->adc_clkdiv = 0;
ADC->stepenable = 0;
ADC->idleconfig = 0;
int i;
for (i=0; i<8; i++) {
ADC->step[i].config = i<<19;
ADC->step[i].delay = 0;
}
// Enable ADC
writel(&ADC->ctrl, 0x07);
// Drain fifo
while (readl(&ADC->fifo0count))
readl(&ADC->fifo0data);
if (!readl(&ADC->ctrl))
shutdown("ADC module not enabled");
}
struct gpio_adc
gpio_adc_setup(uint8_t pin)
{
uint8_t chan = pin - 4 * 32;
if (chan >= 8)
shutdown("Not an adc channel");
if (!readl(&ADC->ctrl))
shutdown("ADC module not enabled");
adc_full_reset();
return (struct gpio_adc){ .chan = chan };
}