forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/net/ethernet/amd/xgbe/xgbe-i2c.c
....@@ -274,9 +274,9 @@
274274 XI2C_IOREAD(pdata, IC_CLR_STOP_DET);
275275 }
276276
277
-static void xgbe_i2c_isr_task(unsigned long data)
277
+static void xgbe_i2c_isr_task(struct tasklet_struct *t)
278278 {
279
- struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data;
279
+ struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_i2c);
280280 struct xgbe_i2c_op_state *state = &pdata->i2c.op_state;
281281 unsigned int isr;
282282
....@@ -324,7 +324,7 @@
324324 if (pdata->isr_as_tasklet)
325325 tasklet_schedule(&pdata->tasklet_i2c);
326326 else
327
- xgbe_i2c_isr_task((unsigned long)pdata);
327
+ xgbe_i2c_isr_task(&pdata->tasklet_i2c);
328328
329329 return IRQ_HANDLED;
330330 }
....@@ -369,7 +369,7 @@
369369
370370 static irqreturn_t xgbe_i2c_combined_isr(struct xgbe_prv_data *pdata)
371371 {
372
- xgbe_i2c_isr_task((unsigned long)pdata);
372
+ xgbe_i2c_isr_task(&pdata->tasklet_i2c);
373373
374374 return IRQ_HANDLED;
375375 }
....@@ -447,8 +447,10 @@
447447 xgbe_i2c_disable(pdata);
448448 xgbe_i2c_clear_all_interrupts(pdata);
449449
450
- if (pdata->dev_irq != pdata->i2c_irq)
450
+ if (pdata->dev_irq != pdata->i2c_irq) {
451451 devm_free_irq(pdata->dev, pdata->i2c_irq, pdata);
452
+ tasklet_kill(&pdata->tasklet_i2c);
453
+ }
452454 }
453455
454456 static int xgbe_i2c_start(struct xgbe_prv_data *pdata)
....@@ -462,8 +464,7 @@
462464
463465 /* If we have a separate I2C irq, enable it */
464466 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);
467468
468469 ret = devm_request_irq(pdata->dev, pdata->i2c_irq,
469470 xgbe_i2c_isr, 0, pdata->i2c_name,