diff options
Diffstat (limited to 'drivers/mfd/jz4740-adc.c')
-rw-r--r-- | drivers/mfd/jz4740-adc.c | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/drivers/mfd/jz4740-adc.c b/drivers/mfd/jz4740-adc.c index 3ad492cb6c41..a0bd0cf05af3 100644 --- a/drivers/mfd/jz4740-adc.c +++ b/drivers/mfd/jz4740-adc.c | |||
@@ -84,36 +84,35 @@ static inline void jz4740_adc_irq_set_masked(struct jz4740_adc *adc, int irq, | |||
84 | spin_unlock_irqrestore(&adc->lock, flags); | 84 | spin_unlock_irqrestore(&adc->lock, flags); |
85 | } | 85 | } |
86 | 86 | ||
87 | static void jz4740_adc_irq_mask(unsigned int irq) | 87 | static void jz4740_adc_irq_mask(struct irq_data *data) |
88 | { | 88 | { |
89 | struct jz4740_adc *adc = get_irq_chip_data(irq); | 89 | struct jz4740_adc *adc = irq_data_get_irq_chip_data(data); |
90 | jz4740_adc_irq_set_masked(adc, irq, true); | 90 | jz4740_adc_irq_set_masked(adc, data->irq, true); |
91 | } | 91 | } |
92 | 92 | ||
93 | static void jz4740_adc_irq_unmask(unsigned int irq) | 93 | static void jz4740_adc_irq_unmask(struct irq_data *data) |
94 | { | 94 | { |
95 | struct jz4740_adc *adc = get_irq_chip_data(irq); | 95 | struct jz4740_adc *adc = irq_data_get_irq_chip_data(data); |
96 | jz4740_adc_irq_set_masked(adc, irq, false); | 96 | jz4740_adc_irq_set_masked(adc, data->irq, false); |
97 | } | 97 | } |
98 | 98 | ||
99 | static void jz4740_adc_irq_ack(unsigned int irq) | 99 | static void jz4740_adc_irq_ack(struct irq_data *data) |
100 | { | 100 | { |
101 | struct jz4740_adc *adc = get_irq_chip_data(irq); | 101 | struct jz4740_adc *adc = irq_data_get_irq_chip_data(data); |
102 | 102 | unsigned int irq = data->irq - adc->irq_base; | |
103 | irq -= adc->irq_base; | ||
104 | writeb(BIT(irq), adc->base + JZ_REG_ADC_STATUS); | 103 | writeb(BIT(irq), adc->base + JZ_REG_ADC_STATUS); |
105 | } | 104 | } |
106 | 105 | ||
107 | static struct irq_chip jz4740_adc_irq_chip = { | 106 | static struct irq_chip jz4740_adc_irq_chip = { |
108 | .name = "jz4740-adc", | 107 | .name = "jz4740-adc", |
109 | .mask = jz4740_adc_irq_mask, | 108 | .irq_mask = jz4740_adc_irq_mask, |
110 | .unmask = jz4740_adc_irq_unmask, | 109 | .irq_unmask = jz4740_adc_irq_unmask, |
111 | .ack = jz4740_adc_irq_ack, | 110 | .irq_ack = jz4740_adc_irq_ack, |
112 | }; | 111 | }; |
113 | 112 | ||
114 | static void jz4740_adc_irq_demux(unsigned int irq, struct irq_desc *desc) | 113 | static void jz4740_adc_irq_demux(unsigned int irq, struct irq_desc *desc) |
115 | { | 114 | { |
116 | struct jz4740_adc *adc = get_irq_desc_data(desc); | 115 | struct jz4740_adc *adc = irq_desc_get_handler_data(desc); |
117 | uint8_t status; | 116 | uint8_t status; |
118 | unsigned int i; | 117 | unsigned int i; |
119 | 118 | ||
@@ -153,7 +152,7 @@ static inline void jz4740_adc_set_enabled(struct jz4740_adc *adc, int engine, | |||
153 | if (enabled) | 152 | if (enabled) |
154 | val |= BIT(engine); | 153 | val |= BIT(engine); |
155 | else | 154 | else |
156 | val &= BIT(engine); | 155 | val &= ~BIT(engine); |
157 | writeb(val, adc->base + JZ_REG_ADC_ENABLE); | 156 | writeb(val, adc->base + JZ_REG_ADC_ENABLE); |
158 | 157 | ||
159 | spin_unlock_irqrestore(&adc->lock, flags); | 158 | spin_unlock_irqrestore(&adc->lock, flags); |
@@ -233,8 +232,6 @@ const struct mfd_cell jz4740_adc_cells[] = { | |||
233 | .name = "jz4740-hwmon", | 232 | .name = "jz4740-hwmon", |
234 | .num_resources = ARRAY_SIZE(jz4740_hwmon_resources), | 233 | .num_resources = ARRAY_SIZE(jz4740_hwmon_resources), |
235 | .resources = jz4740_hwmon_resources, | 234 | .resources = jz4740_hwmon_resources, |
236 | .platform_data = (void *)&jz4740_adc_cells[0], | ||
237 | .data_size = sizeof(struct mfd_cell), | ||
238 | 235 | ||
239 | .enable = jz4740_adc_cell_enable, | 236 | .enable = jz4740_adc_cell_enable, |
240 | .disable = jz4740_adc_cell_disable, | 237 | .disable = jz4740_adc_cell_disable, |
@@ -244,8 +241,6 @@ const struct mfd_cell jz4740_adc_cells[] = { | |||
244 | .name = "jz4740-battery", | 241 | .name = "jz4740-battery", |
245 | .num_resources = ARRAY_SIZE(jz4740_battery_resources), | 242 | .num_resources = ARRAY_SIZE(jz4740_battery_resources), |
246 | .resources = jz4740_battery_resources, | 243 | .resources = jz4740_battery_resources, |
247 | .platform_data = (void *)&jz4740_adc_cells[1], | ||
248 | .data_size = sizeof(struct mfd_cell), | ||
249 | 244 | ||
250 | .enable = jz4740_adc_cell_enable, | 245 | .enable = jz4740_adc_cell_enable, |
251 | .disable = jz4740_adc_cell_disable, | 246 | .disable = jz4740_adc_cell_disable, |
@@ -315,13 +310,13 @@ static int __devinit jz4740_adc_probe(struct platform_device *pdev) | |||
315 | platform_set_drvdata(pdev, adc); | 310 | platform_set_drvdata(pdev, adc); |
316 | 311 | ||
317 | for (irq = adc->irq_base; irq < adc->irq_base + 5; ++irq) { | 312 | for (irq = adc->irq_base; irq < adc->irq_base + 5; ++irq) { |
318 | set_irq_chip_data(irq, adc); | 313 | irq_set_chip_data(irq, adc); |
319 | set_irq_chip_and_handler(irq, &jz4740_adc_irq_chip, | 314 | irq_set_chip_and_handler(irq, &jz4740_adc_irq_chip, |
320 | handle_level_irq); | 315 | handle_level_irq); |
321 | } | 316 | } |
322 | 317 | ||
323 | set_irq_data(adc->irq, adc); | 318 | irq_set_handler_data(adc->irq, adc); |
324 | set_irq_chained_handler(adc->irq, jz4740_adc_irq_demux); | 319 | irq_set_chained_handler(adc->irq, jz4740_adc_irq_demux); |
325 | 320 | ||
326 | writeb(0x00, adc->base + JZ_REG_ADC_ENABLE); | 321 | writeb(0x00, adc->base + JZ_REG_ADC_ENABLE); |
327 | writeb(0xff, adc->base + JZ_REG_ADC_CTRL); | 322 | writeb(0xff, adc->base + JZ_REG_ADC_CTRL); |
@@ -352,8 +347,8 @@ static int __devexit jz4740_adc_remove(struct platform_device *pdev) | |||
352 | 347 | ||
353 | mfd_remove_devices(&pdev->dev); | 348 | mfd_remove_devices(&pdev->dev); |
354 | 349 | ||
355 | set_irq_data(adc->irq, NULL); | 350 | irq_set_handler_data(adc->irq, NULL); |
356 | set_irq_chained_handler(adc->irq, NULL); | 351 | irq_set_chained_handler(adc->irq, NULL); |
357 | 352 | ||
358 | iounmap(adc->base); | 353 | iounmap(adc->base); |
359 | release_mem_region(adc->mem->start, resource_size(adc->mem)); | 354 | release_mem_region(adc->mem->start, resource_size(adc->mem)); |