Update the ADXL345 interface following the current interface scheme

This commit is contained in:
Gregory Nutt 2014-12-16 11:45:28 -06:00
parent db562b774a
commit 75637464b2

View File

@ -98,8 +98,9 @@ struct kl_adxl345config_s
/* Additional private definitions only known to this driver */ /* Additional private definitions only known to this driver */
ADXL345_HANDLE handle; /* The ADXL345 driver handle */ ADXL345_HANDLE handle; /* The ADXL345 driver handle */
xcpt_t handler; /* The ADXL345 interrupt handler */ adxl345_handler_t handler; /* The ADXL345 interrupt handler */
FAR void *arg; /* Argument to pass to the interrupt handler */
}; };
/**************************************************************************** /****************************************************************************
@ -115,7 +116,8 @@ struct kl_adxl345config_s
* clear - Acknowledge/clear any pending GPIO interrupt * clear - Acknowledge/clear any pending GPIO interrupt
*/ */
static int adxl345_attach(FAR struct adxl345_config_s *state, xcpt_t isr); static int adxl345_attach(FAR struct adxl345_config_s *state,
adxl345_handler_t handler, FAR void *arg);
static void adxl345_enable(FAR struct adxl345_config_s *state, bool enable); static void adxl345_enable(FAR struct adxl345_config_s *state, bool enable);
static void adxl345_clear(FAR struct adxl345_config_s *state); static void adxl345_clear(FAR struct adxl345_config_s *state);
@ -146,12 +148,26 @@ static struct kl_adxl345config_s g_adxl345config =
.enable = adxl345_enable, .enable = adxl345_enable,
.clear = adxl345_clear, .clear = adxl345_clear,
}, },
.handler = NULL,
}; };
/**************************************************************************** /****************************************************************************
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
/* This is the ADX1345 Interupt handler */
int adx1345_interrupt(int irq, FAR void *context)
{
/* Verify that we have a handler attached */
if (g_adxl345config.handler)
{
/* Yes.. forward with interrupt along with its argument */
g_adxl345config.handler(&g_adxl345config.config, g_adxl345config.arg);
}
return OK;
}
/* IRQ/GPIO access callbacks. These operations all hidden behind /* IRQ/GPIO access callbacks. These operations all hidden behind
* callbacks to isolate the ADXL345 driver from differences in GPIO * callbacks to isolate the ADXL345 driver from differences in GPIO
@ -159,19 +175,23 @@ static struct kl_adxl345config_s g_adxl345config =
* *
* attach - Attach the ADXL345 interrupt handler to the GPIO interrupt * attach - Attach the ADXL345 interrupt handler to the GPIO interrupt
* enable - Enable or disable the GPIO interrupt * enable - Enable or disable the GPIO interrupt
* clear - Acknowledge/clear any pending GPIO interrupt * clear - Acknowledge/clear any pending GPIO interrupt
*/ */
static int adxl345_attach(FAR struct adxl345_config_s *state, xcpt_t isr) static int adxl345_attach(FAR struct adxl345_config_s *state,
adxl345_handler_t handler, FAR void *arg)
{ {
FAR struct kl_adxl345config_s *priv = (FAR struct kl_adxl345config_s *)state; FAR struct kl_adxl345config_s *priv = (FAR struct kl_adxl345config_s *)state;
ivdbg("Saving handler %p\n", isr); snvdbg("Saving handler %p\n", isr);
DEBUGASSERT(priv); DEBUGASSERT(priv);
/* Just save the handler. We will use it when interrupts are enabled */ /* Just save the handler and its argument. We will use it when interrupts
* are enabled
*/
priv->handler = isr; priv->handler = handler;
priv->arg = arg;
return OK; return OK;
} }
@ -191,7 +211,7 @@ static void adxl345_enable(FAR struct adxl345_config_s *state, bool enable)
/* Configure the interrupt using the SAVED handler */ /* Configure the interrupt using the SAVED handler */
kl_configgpio(GPIO_ADXL345_INT1); kl_configgpio(GPIO_ADXL345_INT1);
(void)kl_gpioirqattach(GPIO_ADXL345_INT1, priv->handler); (void)kl_gpioirqattach(GPIO_ADXL345_INT1, adx1345_interrupt);
kl_gpioirqenable(GPIO_ADXL345_INT1); kl_gpioirqenable(GPIO_ADXL345_INT1);
} }
else else
@ -237,14 +257,14 @@ int adxl345_archinitialize(int minor)
FAR struct spi_dev_s *dev; FAR struct spi_dev_s *dev;
int ret; int ret;
idbg("minor %d\n", minor); sndbg("minor %d\n", minor);
DEBUGASSERT(minor == 0); DEBUGASSERT(minor == 0);
/* Check if we are already initialized */ /* Check if we are already initialized */
if (!g_adxl345config.handle) if (!g_adxl345config.handle)
{ {
ivdbg("Initializing\n"); snvdbg("Initializing\n");
/* Configure the ADXL345 interrupt pin as an input */ /* Configure the ADXL345 interrupt pin as an input */
@ -255,7 +275,7 @@ int adxl345_archinitialize(int minor)
dev = up_spiinitialize(CONFIG_ADXL345_SPIDEV); dev = up_spiinitialize(CONFIG_ADXL345_SPIDEV);
if (!dev) if (!dev)
{ {
idbg("Failed to initialize SPI bus %d\n", CONFIG_ADXL345_SPIDEV); sndbg("Failed to initialize SPI bus %d\n", CONFIG_ADXL345_SPIDEV);
return -ENODEV; return -ENODEV;
} }
@ -265,7 +285,7 @@ int adxl345_archinitialize(int minor)
adxl345_instantiate(dev, (FAR struct adxl345_config_s *)&g_adxl345config); adxl345_instantiate(dev, (FAR struct adxl345_config_s *)&g_adxl345config);
if (!g_adxl345config.handle) if (!g_adxl345config.handle)
{ {
idbg("Failed to instantiate the ADXL345 driver\n"); sndbg("Failed to instantiate the ADXL345 driver\n");
return -ENODEV; return -ENODEV;
} }
@ -274,8 +294,8 @@ int adxl345_archinitialize(int minor)
ret = adxl345_register(g_adxl345config.handle, CONFIG_ADXL345_DEVMINOR); ret = adxl345_register(g_adxl345config.handle, CONFIG_ADXL345_DEVMINOR);
if (ret < 0) if (ret < 0)
{ {
idbg("Failed to register STMPE driver: %d\n", ret); sndbg("Failed to register ADX1345 driver: %d\n", ret);
return -ENODEV; return ret;
} }
} }