aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/i2c/muxes
diff options
context:
space:
mode:
authorVladimir Zapolskiy <vladimir_zapolskiy@mentor.com>2015-07-27 17:30:50 +0300
committerWolfram Sang <wsa@the-dreams.de>2015-08-10 08:37:36 +0200
commit48e9743dd6483c5fd3f10c8e42c60d52d64b0e27 (patch)
treed657778ce50ddf4a3f088842c0d18d1b29fdd5b3 /drivers/i2c/muxes
parenti2c: core: manage i2c bus device refcount in i2c_[get|put]_adapter (diff)
downloadwireguard-linux-48e9743dd6483c5fd3f10c8e42c60d52d64b0e27.tar.xz
wireguard-linux-48e9743dd6483c5fd3f10c8e42c60d52d64b0e27.zip
i2c: core: add and export of_get_i2c_adapter_by_node() interface
of_find_i2c_adapter_by_node() call requires quite often missing put_device(), and i2c_put_adapter() releases a device locked by i2c_get_adapter() only. In general module_put(adapter->owner) and put_device(dev) are not interchangeable. This is a common error reproduction scenario as a result of the misusage described above (for clearness this is run on iMX6 platform with HDMI and I2C bus drivers compiled as kernel modules): root@mx6q:~# lsmod | grep i2c i2c_imx 10213 0 root@mx6q:~# lsmod | grep dw_hdmi_imx dw_hdmi_imx 3631 0 dw_hdmi 11846 1 dw_hdmi_imx imxdrm 8674 3 dw_hdmi_imx,imx_ipuv3_crtc,imx_ldb drm_kms_helper 113765 5 dw_hdmi,imxdrm,imx_ipuv3_crtc,imx_ldb root@mx6q:~# rmmod dw_hdmi_imx root@mx6q:~# lsmod | grep i2c i2c_imx 10213 -1 ^^^^^ root@mx6q:~# rmmod i2c_imx rmmod: ERROR: Module i2c_imx is in use To fix existing users of these interfaces and to avoid any further confusion and misusage in future, add one more interface of_get_i2c_adapter_by_node(), it is similar to i2c_get_adapter() in sense that an I2C bus device driver found and locked by user can be correctly unlocked by i2c_put_adapter(). Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'drivers/i2c/muxes')
0 files changed, 0 insertions, 0 deletions