diff options
| author | Haojian Zhuang <haojian.zhuang@marvell.com> | 2010-02-08 05:02:00 -0500 |
|---|---|---|
| committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-03-07 16:17:20 -0500 |
| commit | 2afa62ea76027b00e472ddb672191e6e15425b43 (patch) | |
| tree | 3c70f220af28c859fea638e5eae4aed726f5dcdd /drivers/input/touchscreen | |
| parent | 7731074ab21745cde00578148ce760df107eaf27 (diff) | |
mfd: Use genirq in 88pm860x
Use genirq to simplify IRQ handling in 88pm860x. Remove the interface of
mask/free IRQs on 88pm860x. All these work is taken by genirq. Update the
touchscreen driver of 88pm860x since IRQ handling is changed.
Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/input/touchscreen')
| -rw-r--r-- | drivers/input/touchscreen/88pm860x-ts.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/input/touchscreen/88pm860x-ts.c b/drivers/input/touchscreen/88pm860x-ts.c index 56254d2a1f6e..286bb490a9f2 100644 --- a/drivers/input/touchscreen/88pm860x-ts.c +++ b/drivers/input/touchscreen/88pm860x-ts.c | |||
| @@ -54,7 +54,6 @@ static irqreturn_t pm860x_touch_handler(int irq, void *data) | |||
| 54 | int z1, z2, rt = 0; | 54 | int z1, z2, rt = 0; |
| 55 | int ret; | 55 | int ret; |
| 56 | 56 | ||
| 57 | pm860x_mask_irq(chip, irq); | ||
| 58 | ret = pm860x_bulk_read(touch->i2c, MEAS_TSIX_1, MEAS_LEN, buf); | 57 | ret = pm860x_bulk_read(touch->i2c, MEAS_TSIX_1, MEAS_LEN, buf); |
| 59 | if (ret < 0) | 58 | if (ret < 0) |
| 60 | goto out; | 59 | goto out; |
| @@ -83,7 +82,6 @@ static irqreturn_t pm860x_touch_handler(int irq, void *data) | |||
| 83 | dev_dbg(chip->dev, "pen release\n"); | 82 | dev_dbg(chip->dev, "pen release\n"); |
| 84 | } | 83 | } |
| 85 | input_sync(touch->idev); | 84 | input_sync(touch->idev); |
| 86 | pm860x_unmask_irq(chip, irq); | ||
| 87 | 85 | ||
| 88 | out: | 86 | out: |
| 89 | return IRQ_HANDLED; | 87 | return IRQ_HANDLED; |
| @@ -92,7 +90,6 @@ out: | |||
| 92 | static int pm860x_touch_open(struct input_dev *dev) | 90 | static int pm860x_touch_open(struct input_dev *dev) |
| 93 | { | 91 | { |
| 94 | struct pm860x_touch *touch = input_get_drvdata(dev); | 92 | struct pm860x_touch *touch = input_get_drvdata(dev); |
| 95 | struct pm860x_chip *chip = touch->chip; | ||
| 96 | int data, ret; | 93 | int data, ret; |
| 97 | 94 | ||
| 98 | data = MEAS_PD_EN | MEAS_TSIX_EN | MEAS_TSIY_EN | 95 | data = MEAS_PD_EN | MEAS_TSIX_EN | MEAS_TSIY_EN |
| @@ -100,7 +97,6 @@ static int pm860x_touch_open(struct input_dev *dev) | |||
| 100 | ret = pm860x_set_bits(touch->i2c, MEAS_EN3, data, data); | 97 | ret = pm860x_set_bits(touch->i2c, MEAS_EN3, data, data); |
| 101 | if (ret < 0) | 98 | if (ret < 0) |
| 102 | goto out; | 99 | goto out; |
| 103 | pm860x_unmask_irq(chip, touch->irq); | ||
| 104 | return 0; | 100 | return 0; |
| 105 | out: | 101 | out: |
| 106 | return ret; | 102 | return ret; |
| @@ -109,13 +105,11 @@ out: | |||
| 109 | static void pm860x_touch_close(struct input_dev *dev) | 105 | static void pm860x_touch_close(struct input_dev *dev) |
| 110 | { | 106 | { |
| 111 | struct pm860x_touch *touch = input_get_drvdata(dev); | 107 | struct pm860x_touch *touch = input_get_drvdata(dev); |
| 112 | struct pm860x_chip *chip = touch->chip; | ||
| 113 | int data; | 108 | int data; |
| 114 | 109 | ||
| 115 | data = MEAS_PD_EN | MEAS_TSIX_EN | MEAS_TSIY_EN | 110 | data = MEAS_PD_EN | MEAS_TSIX_EN | MEAS_TSIY_EN |
| 116 | | MEAS_TSIZ1_EN | MEAS_TSIZ2_EN; | 111 | | MEAS_TSIZ1_EN | MEAS_TSIZ2_EN; |
| 117 | pm860x_set_bits(touch->i2c, MEAS_EN3, data, 0); | 112 | pm860x_set_bits(touch->i2c, MEAS_EN3, data, 0); |
| 118 | pm860x_mask_irq(chip, touch->irq); | ||
| 119 | } | 113 | } |
| 120 | 114 | ||
| 121 | static int __devinit pm860x_touch_probe(struct platform_device *pdev) | 115 | static int __devinit pm860x_touch_probe(struct platform_device *pdev) |
| @@ -164,11 +158,12 @@ static int __devinit pm860x_touch_probe(struct platform_device *pdev) | |||
| 164 | touch->idev->close = pm860x_touch_close; | 158 | touch->idev->close = pm860x_touch_close; |
| 165 | touch->chip = chip; | 159 | touch->chip = chip; |
| 166 | touch->i2c = (chip->id == CHIP_PM8607) ? chip->client : chip->companion; | 160 | touch->i2c = (chip->id == CHIP_PM8607) ? chip->client : chip->companion; |
| 167 | touch->irq = irq; | 161 | touch->irq = irq + chip->irq_base; |
| 168 | touch->res_x = pdata->res_x; | 162 | touch->res_x = pdata->res_x; |
| 169 | input_set_drvdata(touch->idev, touch); | 163 | input_set_drvdata(touch->idev, touch); |
| 170 | 164 | ||
| 171 | ret = pm860x_request_irq(chip, irq, pm860x_touch_handler, touch); | 165 | ret = request_threaded_irq(touch->irq, NULL, pm860x_touch_handler, |
| 166 | IRQF_ONESHOT, "touch", touch); | ||
| 172 | if (ret < 0) | 167 | if (ret < 0) |
| 173 | goto out_irq; | 168 | goto out_irq; |
| 174 | 169 | ||
| @@ -194,7 +189,7 @@ static int __devinit pm860x_touch_probe(struct platform_device *pdev) | |||
| 194 | platform_set_drvdata(pdev, touch); | 189 | platform_set_drvdata(pdev, touch); |
| 195 | return 0; | 190 | return 0; |
| 196 | out_rg: | 191 | out_rg: |
| 197 | pm860x_free_irq(chip, irq); | 192 | free_irq(touch->irq, touch); |
| 198 | out_irq: | 193 | out_irq: |
| 199 | input_free_device(touch->idev); | 194 | input_free_device(touch->idev); |
| 200 | out: | 195 | out: |
| @@ -207,7 +202,7 @@ static int __devexit pm860x_touch_remove(struct platform_device *pdev) | |||
| 207 | struct pm860x_touch *touch = platform_get_drvdata(pdev); | 202 | struct pm860x_touch *touch = platform_get_drvdata(pdev); |
| 208 | 203 | ||
| 209 | input_unregister_device(touch->idev); | 204 | input_unregister_device(touch->idev); |
| 210 | pm860x_free_irq(touch->chip, touch->irq); | 205 | free_irq(touch->irq, touch); |
| 211 | platform_set_drvdata(pdev, NULL); | 206 | platform_set_drvdata(pdev, NULL); |
| 212 | kfree(touch); | 207 | kfree(touch); |
| 213 | return 0; | 208 | return 0; |
