leon,gpiolib: add mask/unmask interrupt support

This commit is contained in:
Daniel Hellstrom
2015-02-23 13:47:32 +01:00
parent 949d0d6206
commit b583cc5f75
3 changed files with 27 additions and 0 deletions

View File

@@ -251,6 +251,17 @@ int gpiolib_irq_disable(void *handle)
return gpiolib_irq_opts(handle, GPIOLIB_IRQ_DISABLE);
}
int gpiolib_irq_mask(void *handle)
{
return gpiolib_irq_opts(handle, GPIOLIB_IRQ_MASK);
}
int gpiolib_irq_unmask(void *handle)
{
return gpiolib_irq_opts(handle, GPIOLIB_IRQ_UNMASK);
}
/*** Initialization ***/
int gpiolib_initialize(void)
{

View File

@@ -262,6 +262,18 @@ int grgpio_grpiolib_irq_opts(void *handle, unsigned int options)
return -1;
}
}
if ( options & GPIOLIB_IRQ_MASK ) {
/* Mask (disable) interrupt at interrupt controller */
if ( drvmgr_interrupt_mask(priv->dev, portnr) ) {
return -1;
}
}
if ( options & GPIOLIB_IRQ_UNMASK ) {
/* Unmask (enable) interrupt at interrupt controller */
if ( drvmgr_interrupt_unmask(priv->dev, portnr) ) {
return -1;
}
}
return 0;
}

View File

@@ -51,6 +51,8 @@ extern int gpiolib_get(void *handle, int *inval);
extern int gpiolib_irq_clear(void *handle);
extern int gpiolib_irq_enable(void *handle);
extern int gpiolib_irq_disable(void *handle);
extern int gpiolib_irq_mask(void *handle);
extern int gpiolib_irq_unmask(void *handle);
extern int gpiolib_irq_force(void *handle);
extern int gpiolib_irq_register(void *handle, void *func, void *arg);
@@ -75,6 +77,8 @@ struct gpiolib_drv_ops {
#define GPIOLIB_IRQ_DISABLE 0x02
#define GPIOLIB_IRQ_CLEAR 0x04
#define GPIOLIB_IRQ_FORCE 0x08
#define GPIOLIB_IRQ_MASK 0x10
#define GPIOLIB_IRQ_UNMASK 0x20
struct gpiolib_drv {
struct gpiolib_drv_ops *ops;