mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
i.MX drivers update for 6.19:
- A series from Peng Fan to to improve i.MX SCU firmware drivers -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEFmJXigPl4LoGSz08UFdYWoewfM4FAmkbDRkACgkQUFdYWoew fM4P0Qf7BNHm+UMhOtNsKpydwY6D5IqFt1NlN6x95IAKOX6A1BrF55og5A61YVdi G9vW8PtTG3jo4UwBJj9HKgSDyew1iPVfXHOpLw8/6d7D5swIqNXoQw7TPIWu/1B5 Jp9Vt3JCJGSxMXd8UW5gh/j9TONbMEghhHlp0C+evCtGZBnDpX4S/dKkpajkh55r WDYJYwuFFcY6xdmULPe419ggHlMxbG4/JvA27HzlOdPJUvEsz6tw5qaWgQOlPoZm lurKgaubtgpFkvsR8pF0yVg82ZVsGHtuliNh3ODUcVDTIACjF493BlYBNVe2DRSb JPato2KOYbJVCkBgEfo408C8zjAh+g== =nbkK -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAmklhb8ACgkQmmx57+YA GNmXuA//bpO26LLMBWg7+QOYPPqYxl2xA8k5LNQTJuXm5ZgtPZrcl7z+TTUYo7lD 3+2DYAa2O9fm9QOav8l82jteb+VaPiKDpJ+F3kD1TtuNtvKUWDxev6ncGTDY2Jfv DrEuecZiVT75ZqcIx5o94BuSiqzk5NcJi0wd2x4e3F+YtACEqou3giAortWcjaTn h9+j9X0MWR8jKGLq+qWr2KL1sJDpqeAFNaRgailuDzRbvA0RRRE6JwQo2bl7yNiv BsaMizpnLP3O8JU1swFWPGzzMBgi9R0RlASg4Z2X0UZjsqtR82hDhUoVFteE4hlx qRAf2ZQfiyYOFmNRf8vzGSrEItYNHWBsHaP9FGurO8N0gEpPNai38feiND+spwLb d30R5qcjfD+goKDPnLKuEnZ00Sa/ZiCR7X2jNEURgYL8yVABxiDRvZ/wKi1ZPgVG mPIh+2QCl2VB2pOAnMnJRXAjeAgDCT0KGREptRIm5d7Ti7CDwy7Ne27JfhMzKx2S 4jqVnDU6Sn1/GeCgc3Y7IXkQWb2ZEombEM/sUiPZU9jkKsru//1bjS2d9Tbc7Uc7 FVitD1oxC/9AAhUCP3rZ9qd8orwYn18BKGZcO1imXEQepkRQpvgVmw+6h9Rz/bv1 BMKkbbmD/peHIaytNmKq7wtjDQDw+K6/wJxgoVudvM3do6RVPas= =3ZOr -----END PGP SIGNATURE----- Merge tag 'imx-drivers-6.19' of https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into soc/drivers i.MX drivers update for 6.19: - A series from Peng Fan to to improve i.MX SCU firmware drivers * tag 'imx-drivers-6.19' of https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: firmware: imx: scu: Use devm_mutex_init firmware: imx: scu: Suppress bind attrs firmware: imx: scu: Update error code firmware: imx: scu-irq: Remove unused export of imx_scu_enable_general_irq_channel firmware: imx: scu-irq: Set mu_resource_id before get handle firmware: imx: scu-irq: Init workqueue before request mbox channel firmware: imx: scu-irq: Free mailbox client on failure at imx_scu_enable_general_irq_channel() firmware: imx: scu-irq: fix OF node leak in Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
16e8af6c03
@ -203,6 +203,18 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
|
||||
struct mbox_chan *ch;
|
||||
int ret = 0, i = 0;
|
||||
|
||||
if (!of_parse_phandle_with_args(dev->of_node, "mboxes",
|
||||
"#mbox-cells", 0, &spec)) {
|
||||
i = of_alias_get_id(spec.np, "mu");
|
||||
of_node_put(spec.np);
|
||||
}
|
||||
|
||||
/* use mu1 as general mu irq channel if failed */
|
||||
if (i < 0)
|
||||
i = 1;
|
||||
|
||||
mu_resource_id = IMX_SC_R_MU_0A + i;
|
||||
|
||||
ret = imx_scu_get_handle(&imx_sc_irq_ipc_handle);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -214,27 +226,16 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
|
||||
cl->dev = dev;
|
||||
cl->rx_callback = imx_scu_irq_callback;
|
||||
|
||||
INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
|
||||
|
||||
/* SCU general IRQ uses general interrupt channel 3 */
|
||||
ch = mbox_request_channel_byname(cl, "gip3");
|
||||
if (IS_ERR(ch)) {
|
||||
ret = PTR_ERR(ch);
|
||||
dev_err(dev, "failed to request mbox chan gip3, ret %d\n", ret);
|
||||
devm_kfree(dev, cl);
|
||||
return ret;
|
||||
goto free_cl;
|
||||
}
|
||||
|
||||
INIT_WORK(&imx_sc_irq_work, imx_scu_irq_work_handler);
|
||||
|
||||
if (!of_parse_phandle_with_args(dev->of_node, "mboxes",
|
||||
"#mbox-cells", 0, &spec))
|
||||
i = of_alias_get_id(spec.np, "mu");
|
||||
|
||||
/* use mu1 as general mu irq channel if failed */
|
||||
if (i < 0)
|
||||
i = 1;
|
||||
|
||||
mu_resource_id = IMX_SC_R_MU_0A + i;
|
||||
|
||||
/* Create directory under /sysfs/firmware */
|
||||
wakeup_obj = kobject_create_and_add("scu_wakeup_source", firmware_kobj);
|
||||
if (!wakeup_obj) {
|
||||
@ -253,7 +254,8 @@ int imx_scu_enable_general_irq_channel(struct device *dev)
|
||||
|
||||
free_ch:
|
||||
mbox_free_channel(ch);
|
||||
free_cl:
|
||||
devm_kfree(dev, cl);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(imx_scu_enable_general_irq_channel);
|
||||
|
||||
@ -73,9 +73,9 @@ static int imx_sc_linux_errmap[IMX_SC_ERR_LAST] = {
|
||||
-EACCES, /* IMX_SC_ERR_NOACCESS */
|
||||
-EACCES, /* IMX_SC_ERR_LOCKED */
|
||||
-ERANGE, /* IMX_SC_ERR_UNAVAILABLE */
|
||||
-EEXIST, /* IMX_SC_ERR_NOTFOUND */
|
||||
-EPERM, /* IMX_SC_ERR_NOPOWER */
|
||||
-EPIPE, /* IMX_SC_ERR_IPC */
|
||||
-ENOENT, /* IMX_SC_ERR_NOTFOUND */
|
||||
-ENODEV, /* IMX_SC_ERR_NOPOWER */
|
||||
-ECOMM, /* IMX_SC_ERR_IPC */
|
||||
-EBUSY, /* IMX_SC_ERR_BUSY */
|
||||
-EIO, /* IMX_SC_ERR_FAIL */
|
||||
};
|
||||
@ -324,7 +324,9 @@ static int imx_scu_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
sc_ipc->dev = dev;
|
||||
mutex_init(&sc_ipc->lock);
|
||||
ret = devm_mutex_init(dev, &sc_ipc->lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
init_completion(&sc_ipc->done);
|
||||
|
||||
imx_sc_ipc_handle = sc_ipc;
|
||||
@ -352,6 +354,7 @@ static struct platform_driver imx_scu_driver = {
|
||||
.driver = {
|
||||
.name = "imx-scu",
|
||||
.of_match_table = imx_scu_match,
|
||||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = imx_scu_probe,
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user