i2c: algo: pca: Fix chip reset function for PCA9665
authorThomas Kavanagh <tkavanagh@juniper.net>
Fri, 21 Sep 2012 03:20:46 +0000 (20:20 -0700)
committerWolfram Sang <w.sang@pengutronix.de>
Sat, 6 Oct 2012 11:14:36 +0000 (13:14 +0200)
commita76e7c6821b5dddf69db9d76ec282819545f5b73
treeb86ced7ed1c3187cf1757e0f4b5acd68b423d8a4
parent0c25aefa35c2fb5592895615f77d9f6fa36a849d
i2c: algo: pca: Fix chip reset function for PCA9665

The parameter passed to pca9665_reset is adap->data (which is bus driver
specific), not i2c_algp_pca_data *adap. pca9665_reset expects it to be
i2c_algp_pca_data *adap. All other wrappers from the algo call back to
the bus driver, which knows to handle its custom data. Only pca9665_reset
resides inside the algorithm code and does not know how to handle a custom
data structure. This can result in a kernel crash.

Fix by re-factoring pca_reset() from a macro to a function handling chip
specific code, and only call adap->reset_chip() if the chip is not PCA9665.

Signed-off-by: Thomas Kavanagh <tkavanagh@juniper.net>
Signed-off-by: Guenter Roeck <groeck@juniper.net>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
drivers/i2c/algos/i2c-algo-pca.c
include/linux/i2c-algo-pca.h