1
0
Fork 0
forked from len0rd/rockbox

MC13783 (Gigabeat S PMIC): Complete the header file. Distinguish status, sense and mask bit defines to avoid conflicts within the definitions. Much care taken but give a double check before making new use of anything.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17534 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2008-05-16 06:21:11 +00:00
parent 16c8f060e6
commit cda664b701
5 changed files with 1046 additions and 384 deletions

View file

@ -254,9 +254,9 @@ bool rtc_check_alarm_flag(void)
bool rtc_enable_alarm(bool enable)
{
if (enable)
mc13783_clear(MC13783_INTERRUPT_MASK1, MC13783_TODA);
mc13783_clear(MC13783_INTERRUPT_MASK1, MC13783_TODAM);
else
mc13783_set(MC13783_INTERRUPT_MASK1, MC13783_TODA);
mc13783_set(MC13783_INTERRUPT_MASK1, MC13783_TODAM);
return false;
}

File diff suppressed because it is too large Load diff

View file

@ -102,5 +102,5 @@ void adc_init(void)
mc13783_write(MC13783_ADC1, MC13783_ADEN);
/* Enable the ADCDONE interrupt - notifications are dispatched by
* event handler. */
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_ADCDONE);
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_ADCDONEM);
}

View file

@ -74,18 +74,18 @@ static void mc13783_interrupt_thread(void)
gpio_enable_event(MC13783_GPIO_NUM, MC13783_EVENT_ID);
if (pending[1] & MC13783_TODA) /* only needs to be polled on startup */
if (pending[1] & MC13783_TODAI) /* only needs to be polled on startup */
mc13783_alarm_start();
/* Check initial states for events with a sense bit */
value = mc13783_read(MC13783_INTERRUPT_SENSE0);
usb_set_status(value & MC13783_USB4V4);
set_charger_inserted(value & MC13783_CHGDET);
usb_set_status(value & MC13783_USB4V4S);
set_charger_inserted(value & MC13783_CHGDETS);
value = mc13783_read(MC13783_INTERRUPT_SENSE1);
button_power_set_state((value & MC13783_ONOFD1) == 0);
button_power_set_state((value & MC13783_ONOFD1S) == 0);
#ifdef HAVE_HEADPHONE_DETECTION
set_headphones_inserted((value & MC13783_ONOFD2) == 0);
set_headphones_inserted((value & MC13783_ONOFD2S) == 0);
#endif
pending[0] = pending[1] = 0xffffff;
@ -93,8 +93,9 @@ static void mc13783_interrupt_thread(void)
/* Enable desired PMIC interrupts - some are unmasked in the drivers that
* handle a specific task */
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_CHGDET);
mc13783_clear(MC13783_INTERRUPT_MASK1, MC13783_ONOFD1 | MC13783_ONOFD2);
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_CHGDETM);
mc13783_clear(MC13783_INTERRUPT_MASK1, MC13783_ONOFD1M |
MC13783_ONOFD2M);
while (1)
{
@ -116,20 +117,20 @@ static void mc13783_interrupt_thread(void)
/* Handle ...PENDING0 */
/* Handle interrupts without a sense bit */
if (pending[0] & MC13783_ADCDONE)
if (pending[0] & MC13783_ADCDONEI)
adc_done();
/* Handle interrupts that have a sense bit that needs to
* be checked */
if (pending[0] & (MC13783_CHGDET | MC13783_USB4V4))
if (pending[0] & (MC13783_CHGDETI | MC13783_USB4V4I))
{
value = mc13783_read(MC13783_INTERRUPT_SENSE0);
if (pending[0] & MC13783_CHGDET)
set_charger_inserted(value & MC13783_CHGDET);
if (pending[0] & MC13783_CHGDETI)
set_charger_inserted(value & MC13783_CHGDETS);
if (pending[0] & MC13783_USB4V4)
usb_set_status(value & MC13783_USB4V4);
if (pending[0] & MC13783_USB4V4I)
usb_set_status(value & MC13783_USB4V4S);
}
}
@ -142,15 +143,15 @@ static void mc13783_interrupt_thread(void)
/* Handle interrupts that have a sense bit that needs to
* be checked */
if (pending[1] & (MC13783_ONOFD1 | MC13783_ONOFD2))
if (pending[1] & (MC13783_ONOFD1I | MC13783_ONOFD2I))
{
value = mc13783_read(MC13783_INTERRUPT_SENSE1);
if (pending[1] & MC13783_ONOFD1)
button_power_set_state((value & MC13783_ONOFD1) == 0);
if (pending[1] & MC13783_ONOFD1I)
button_power_set_state((value & MC13783_ONOFD1S) == 0);
#ifdef HAVE_HEADPHONE_DETECTION
if (pending[1] & MC13783_ONOFD2)
set_headphones_inserted((value & MC13783_ONOFD2) == 0);
if (pending[1] & MC13783_ONOFD2I)
set_headphones_inserted((value & MC13783_ONOFD2S) == 0);
#endif
}
}

View file

@ -61,7 +61,7 @@ int usb_detect(void)
/* Read the immediate state of the cable from the PMIC */
bool usb_plugged(void)
{
return mc13783_read(MC13783_INTERRUPT_SENSE0) & MC13783_USB4V4;
return mc13783_read(MC13783_INTERRUPT_SENSE0) & MC13783_USB4V4S;
}
void usb_init_device(void)
@ -73,7 +73,7 @@ void usb_init_device(void)
/* Module will be turned off later after firmware init */
usb_drv_startup();
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_USB4V4);
mc13783_clear(MC13783_INTERRUPT_MASK0, MC13783_USB4V4M);
}
void usb_enable(bool on)