Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / drivers / mfd / pcf50633-core.c
index 8d3c38bf9714857fbe97507e52498a39cec122c2..d26d7747175ef107c9a34d08f44fab4d692114a7 100644 (file)
@@ -444,7 +444,7 @@ static irqreturn_t pcf50633_irq(int irq, void *data)
 
        get_device(pcf->dev);
        disable_irq_nosync(pcf->irq);
-       schedule_work(&pcf->irq_work);
+       queue_work(pcf->work_queue, &pcf->irq_work);
 
        return IRQ_HANDLED;
 }
@@ -575,6 +575,7 @@ static int __devinit pcf50633_probe(struct i2c_client *client,
        pcf->dev = &client->dev;
        pcf->i2c_client = client;
        pcf->irq = client->irq;
+       pcf->work_queue = create_singlethread_workqueue("pcf50633");
 
        INIT_WORK(&pcf->irq_work, pcf50633_irq_worker);
 
@@ -651,6 +652,7 @@ static int __devinit pcf50633_probe(struct i2c_client *client,
        return 0;
 
 err:
+       destroy_workqueue(pcf->work_queue);
        kfree(pcf);
        return ret;
 }
@@ -661,6 +663,7 @@ static int __devexit pcf50633_remove(struct i2c_client *client)
        int i;
 
        free_irq(pcf->irq, pcf);
+       destroy_workqueue(pcf->work_queue);
 
        platform_device_unregister(pcf->input_pdev);
        platform_device_unregister(pcf->rtc_pdev);