.. | .. |
---|
274 | 274 | XI2C_IOREAD(pdata, IC_CLR_STOP_DET); |
---|
275 | 275 | } |
---|
276 | 276 | |
---|
277 | | -static void xgbe_i2c_isr_task(unsigned long data) |
---|
| 277 | +static void xgbe_i2c_isr_task(struct tasklet_struct *t) |
---|
278 | 278 | { |
---|
279 | | - struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data; |
---|
| 279 | + struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_i2c); |
---|
280 | 280 | struct xgbe_i2c_op_state *state = &pdata->i2c.op_state; |
---|
281 | 281 | unsigned int isr; |
---|
282 | 282 | |
---|
.. | .. |
---|
324 | 324 | if (pdata->isr_as_tasklet) |
---|
325 | 325 | tasklet_schedule(&pdata->tasklet_i2c); |
---|
326 | 326 | else |
---|
327 | | - xgbe_i2c_isr_task((unsigned long)pdata); |
---|
| 327 | + xgbe_i2c_isr_task(&pdata->tasklet_i2c); |
---|
328 | 328 | |
---|
329 | 329 | return IRQ_HANDLED; |
---|
330 | 330 | } |
---|
.. | .. |
---|
369 | 369 | |
---|
370 | 370 | static irqreturn_t xgbe_i2c_combined_isr(struct xgbe_prv_data *pdata) |
---|
371 | 371 | { |
---|
372 | | - xgbe_i2c_isr_task((unsigned long)pdata); |
---|
| 372 | + xgbe_i2c_isr_task(&pdata->tasklet_i2c); |
---|
373 | 373 | |
---|
374 | 374 | return IRQ_HANDLED; |
---|
375 | 375 | } |
---|
.. | .. |
---|
447 | 447 | xgbe_i2c_disable(pdata); |
---|
448 | 448 | xgbe_i2c_clear_all_interrupts(pdata); |
---|
449 | 449 | |
---|
450 | | - if (pdata->dev_irq != pdata->i2c_irq) |
---|
| 450 | + if (pdata->dev_irq != pdata->i2c_irq) { |
---|
451 | 451 | devm_free_irq(pdata->dev, pdata->i2c_irq, pdata); |
---|
| 452 | + tasklet_kill(&pdata->tasklet_i2c); |
---|
| 453 | + } |
---|
452 | 454 | } |
---|
453 | 455 | |
---|
454 | 456 | static int xgbe_i2c_start(struct xgbe_prv_data *pdata) |
---|
.. | .. |
---|
462 | 464 | |
---|
463 | 465 | /* If we have a separate I2C irq, enable it */ |
---|
464 | 466 | if (pdata->dev_irq != pdata->i2c_irq) { |
---|
465 | | - tasklet_init(&pdata->tasklet_i2c, xgbe_i2c_isr_task, |
---|
466 | | - (unsigned long)pdata); |
---|
| 467 | + tasklet_setup(&pdata->tasklet_i2c, xgbe_i2c_isr_task); |
---|
467 | 468 | |
---|
468 | 469 | ret = devm_request_irq(pdata->dev, pdata->i2c_irq, |
---|
469 | 470 | xgbe_i2c_isr, 0, pdata->i2c_name, |
---|