Skip to content

Commit

Permalink
Merge pull request torvalds#102 from emlid/s805-i2c-deinit-fix
Browse files Browse the repository at this point in the history
I2C kernel module removal fix
  • Loading branch information
mdrjr committed Apr 20, 2015
2 parents decbf48 + 7c9d1ef commit 877f0fc
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions drivers/amlogic/i2c/aml_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -1172,6 +1172,8 @@ static int aml_i2c_probe(struct platform_device *pdev)
if(ret)
printk(" class register i2c_class fail!\n");

platform_set_drvdata(pdev, i2c);

return 0;
}

Expand All @@ -1180,14 +1182,24 @@ static int aml_i2c_probe(struct platform_device *pdev)
static int aml_i2c_remove(struct platform_device *pdev)
{
struct aml_i2c *i2c = platform_get_drvdata(pdev);
if (i2c->mode == I2C_INTERRUPT_MODE)
free_irq(i2c->irq, i2c);
if (i2c->mode == I2C_TIMER_POLLING_MODE)
hrtimer_cancel(&i2c->aml_i2c_hrtimer);
mutex_destroy(i2c->lock);
i2c_del_adapter(&i2c->adap);
kzfree(i2c);
i2c= NULL;

if (i2c != NULL) {
if (i2c->mode == I2C_INTERRUPT_MODE) {
free_irq(i2c->irq, i2c);
}

if (i2c->mode == I2C_TIMER_POLLING_MODE) {
hrtimer_cancel(&i2c->aml_i2c_hrtimer);
}

mutex_destroy(i2c->lock);
i2c_del_adapter(&i2c->adap);
class_unregister(&i2c->cls);
kzfree(i2c);
} else {
printk(KERN_ALERT "[%s]: i2c is NULL\n", __func__);
}

return 0;
}

Expand Down

0 comments on commit 877f0fc

Please sign in to comment.