mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
i2c-for-7.0-rc5
pxa: fix broken I2C communication on Armada 3700 with recovery fsi: fix device_node reference leak in probe cp2615: fix NULL-deref when serial string is missing -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEOZGx6rniZ1Gk92RdFA3kzBSgKbYFAmm/trAACgkQFA3kzBSg KbaRxQ//a6yPhI6jQ8NDNnaO3c/RwvLbJsOyh7y7Q3cXl1IVbb6bPEY/PWJBGGeK XbmtqdT8vR7sh/OoxwSJYH70ZtRi0aWpL5adabiOl8VJhnW3rABrWS5WIBgm9djL k6p+lnTGNJHWw3PzwVb7lzkgkmyolc2g6qzpTJJd+it39G/ChPTt6vOU6wNgWSMK auRY59FBRwMkKymMt1co77bmvi/ehFm/Ohsjs4/bGkPr/Ngq6wVtm7tcdu5drShR VcexM+yu92pLBr7zR/p89E36W7aqWPGl8K7aYyDJjYXDHcOcRJAHjKi4lf+boCNa ze4dg66Hj6ONVgxOF5lTFGP3ITPg/JP02kskRlVqzJsZdm8hIQraq5eJEUBF0rWZ WsA/E8SuGeNe3hDck5YyoaNbpww0Ph1y+MgNglMXS/hKedEZL7ku5mU66wA1gjjm ek18V0rAFiBP3Ch7vTK4Se1CE1TUUSNoPdEwdPU5/3T8ZZLbgRewr4z5FPL2+Yb+ NdGy6ZPV7rRYXxQVVbNTQ9c4h4cuBYZgnrRGfYXyXXyQ77m5mZlMBa4emPoNExtO 9U2fxbfHU2QBTG0lMOWkbEtMc1bVSvYtDwv1X2gFsdkOy+tmyCDkDHsp0hqao0oo C5rlOYTl/9U6byrpBe8GiCrKHNNmtiuSDJzRUhdXHb8JqqPqp+c= =m7EX -----END PGP SIGNATURE----- Merge tag 'i2c-for-7.0-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux Pull i2c fixes from Wolfram Sang: - fix broken I2C communication on Armada 3700 with recovery - fix device_node reference leak in probe (fsi) - fix NULL-deref when serial string is missing (cp2615) * tag 'i2c-for-7.0-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: i2c: pxa: defer reset on Armada 3700 when recovery is used i2c: fsi: Fix a potential leak in fsi_i2c_probe() i2c: cp2615: fix serial string NULL-deref at probe
This commit is contained in:
commit
11ac4ce3f7
|
|
@ -298,6 +298,9 @@ cp2615_i2c_probe(struct usb_interface *usbif, const struct usb_device_id *id)
|
|||
if (!adap)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!usbdev->serial)
|
||||
return -EINVAL;
|
||||
|
||||
strscpy(adap->name, usbdev->serial, sizeof(adap->name));
|
||||
adap->owner = THIS_MODULE;
|
||||
adap->dev.parent = &usbif->dev;
|
||||
|
|
|
|||
|
|
@ -729,6 +729,7 @@ static int fsi_i2c_probe(struct fsi_device *fsi_dev)
|
|||
rc = i2c_add_adapter(&port->adapter);
|
||||
if (rc < 0) {
|
||||
dev_err(dev, "Failed to register adapter: %d\n", rc);
|
||||
of_node_put(np);
|
||||
kfree(port);
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@ struct pxa_i2c {
|
|||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pinctrl_default;
|
||||
struct pinctrl_state *pinctrl_recovery;
|
||||
bool reset_before_xfer;
|
||||
};
|
||||
|
||||
#define _IBMR(i2c) ((i2c)->reg_ibmr)
|
||||
|
|
@ -1144,6 +1145,11 @@ static int i2c_pxa_xfer(struct i2c_adapter *adap,
|
|||
{
|
||||
struct pxa_i2c *i2c = adap->algo_data;
|
||||
|
||||
if (i2c->reset_before_xfer) {
|
||||
i2c_pxa_reset(i2c);
|
||||
i2c->reset_before_xfer = false;
|
||||
}
|
||||
|
||||
return i2c_pxa_internal_xfer(i2c, msgs, num, i2c_pxa_do_xfer);
|
||||
}
|
||||
|
||||
|
|
@ -1521,7 +1527,16 @@ static int i2c_pxa_probe(struct platform_device *dev)
|
|||
}
|
||||
}
|
||||
|
||||
i2c_pxa_reset(i2c);
|
||||
/*
|
||||
* Skip reset on Armada 3700 when recovery is used to avoid
|
||||
* controller hang due to the pinctrl state changes done by
|
||||
* the generic recovery initialization code. The reset will
|
||||
* be performed later, prior to the first transfer.
|
||||
*/
|
||||
if (i2c_type == REGS_A3700 && i2c->adap.bus_recovery_info)
|
||||
i2c->reset_before_xfer = true;
|
||||
else
|
||||
i2c_pxa_reset(i2c);
|
||||
|
||||
ret = i2c_add_numbered_adapter(&i2c->adap);
|
||||
if (ret < 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user