summaryrefslogtreecommitdiff
path: root/drivers/mxc/pmic/core/pmic_core_spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mxc/pmic/core/pmic_core_spi.c')
-rw-r--r--drivers/mxc/pmic/core/pmic_core_spi.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/drivers/mxc/pmic/core/pmic_core_spi.c b/drivers/mxc/pmic/core/pmic_core_spi.c
index 4cc9eedec9de..300ae9aafdaa 100644
--- a/drivers/mxc/pmic/core/pmic_core_spi.c
+++ b/drivers/mxc/pmic/core/pmic_core_spi.c
@@ -88,7 +88,6 @@ extern void pmic_event_callback(type_event event);
extern void gpio_pmic_active(void);
extern irqreturn_t pmic_irq_handler(int irq, void *dev_id);
extern pmic_version_t mxc_pmic_version;
-extern struct workqueue_struct *pmic_event_wq;
/*!
* This function registers platform device structures for
@@ -192,16 +191,17 @@ static int __devinit pmic_probe(struct spi_device *spi)
return PMIC_ERROR;
}
- pmic_event_wq = create_workqueue("pmic_spi");
- if (!pmic_event_wq) {
- pr_err("pmic driver init: fail to create work queue");
+ ret = pmic_start_event_thread(spi->irq);
+ if (ret) {
+ pr_err("mc13892 pmic driver init: \
+ fail to start event thread\n");
kfree(spi_get_drvdata(spi));
spi_set_drvdata(spi, NULL);
- return -EFAULT;
+ return PMIC_ERROR;
}
/* Set and install PMIC IRQ handler */
- set_irq_type(spi->irq, IRQF_TRIGGER_RISING);
+ set_irq_type(spi->irq, IRQF_TRIGGER_HIGH);
ret = request_irq(spi->irq, pmic_irq_handler, 0, "PMIC_IRQ", 0);
if (ret) {
kfree(spi_get_drvdata(spi));
@@ -239,9 +239,7 @@ static int __devinit pmic_probe(struct spi_device *spi)
*/
static int __devexit pmic_remove(struct spi_device *spi)
{
- if (pmic_event_wq)
- destroy_workqueue(pmic_event_wq);
-
+ pmic_stop_event_thread();
free_irq(spi->irq, 0);
pmic_pdev_unregister();