usb: ChipIdea: add Nuvoton NPCM UDC support
Subsystems (4)
Tomer Maimon
maintainerv6 cover usb: ChipIdea: add Nuvoton NPCM UDC support
This patch set add USB device controller for the NPCM Baseboard Management Controllers (BMC).
NPCM UDC driver is a part of the USB ChipIdea driver.
Adding CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS flag to modify the vbus_active parameter to active in case the ChipIdea USB IP role is device-only and there is no otgsc register.
BMC NPCM7XX and BMC NPCM8XX has ten identical NPCM UDC modules,
The NPCM UDC were tested on NPCM845 evaluation board.
Addressed comments from:
- Krzysztof Kozlowski : https://www.spinics.net/lists/devicetree/msg639032.html
Changes since version 5:
- Remove unnecessary npcm845-udc compatible.
Changes since version 4:
- Modify npcm845-udc compatible.
Changes since version 3:
- Add Acked-by Peter Chen.
Changes since version 2:
- Use dev_err_probe.
- Remove MODULE_ALIAS.
Changes since version 1:
- Add SoC specific compatible.
- Remove USB phy mux property from dt-binding, will be handled differently.
- Add CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS commit to this patch set.
Tomer Maimon (3):
usb: chipidea: add CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS flag
dt-bindings: usb: ci-hdrc-usb2: add npcm750 and npcm845 compatible
usb: chipidea: Add support for NPCM
.../devicetree/bindings/usb/ci-hdrc-usb2.yaml | 6 + drivers/usb/chipidea/Kconfig | 4 + drivers/usb/chipidea/Makefile | 1 + drivers/usb/chipidea/ci_hdrc_npcm.c | 114 ++++++++++++++++++ drivers/usb/chipidea/otg.c | 5 +- include/linux/usb/chipidea.h | 1 + 6 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 drivers/usb/chipidea/ci_hdrc_npcm.c
Signature · 1 line
2.33.0
Tomer Maimon
maintainerPATCH v6 1/3 usb: chipidea: add CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS flag
Adding CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS flag to modify the vbus_active parameter to active in case the ChipIdea USB IP role is device-only and there is no otgsc register.
--- drivers/usb/chipidea/otg.c | 5 ++++- include/linux/usb/chipidea.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/usb/chipidea/otg.c +4 -1
@@ -130,8 +130,11 @@ enum ci_role ci_otg_role(struct ci_hdrc *ci)void ci_handle_vbus_change (struct ci_hdrc *ci) { -if (!ci->is_otg) +if (!ci->is_otg) { +if (ci->platdata->flags &CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS ) +usb_gadget_vbus_connect (&ci->gadget);return ; + }if (hw_read_otgsc (ci,OTGSC_BSV ) && !ci->vbus_active)usb_gadget_vbus_connect (&ci->gadget);
include/linux/usb/chipidea.h +1 -0
@@ -64,6 +64,7 @@ struct ci_hdrc_platform_data {#define CI_HDRC_PMQOS BIT(15)#define CI_HDRC_PHY_VBUS_CONTROL BIT(16)#define CI_HDRC_HAS_PORTSC_PEC_MISSED BIT(17) +#define CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS BIT(18)enum usb_dr_mode dr_mode;#define CI_HDRC_CONTROLLER_RESET_EVENT 0#define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
Signature · 1 line
2.33.0
Tomer Maimon
maintainerPATCH v6 2/3 dt-bindings: usb: ci-hdrc-usb2: add npcm750 and npcm845 compatible
In reply to Tomer MaimonAdd a compatible string for Nuvoton BMC NPCM750 and Nuvoton BMC NPCM845.
--- Documentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/usb/ci-hdrc-usb2.yaml +6 -0
@@ -16,6 +16,7 @@ properties: - enum: - chipidea,usb2 - lsi,zevio-usb + - nuvoton,npcm750-udc - nvidia,tegra20-ehci - nvidia,tegra20-udc - nvidia,tegra30-ehci
@@ -66,6 +67,10 @@ properties: - items: - const: xlnx,zynq-usb-2.20a - const: chipidea,usb2 + - items: + - enum: + - nuvoton,npcm845-udc + - const: nuvoton,npcm750-udc reg: minItems: 1
@@ -388,6 +393,7 @@ allOf: enum: - chipidea,usb2 - lsi,zevio-usb + - nuvoton,npcm750-udc - nvidia,tegra20-udc - nvidia,tegra30-udc - nvidia,tegra114-udc
Signature · 1 line
2.33.0
Re: [PATCH v6 2/3] dt-bindings: usb: ci-hdrc-usb2: add npcm750 and npcm845 compatible
Quoted 4 lines · Tomer Maimon
Add a compatible string for Nuvoton BMC NPCM750 and Nuvoton BMC NPCM845.
Signed-off-by Tomer Maimon <[email protected]>---
Please use scripts/get_maintainers.pl to get a list of necessary people and lists to CC. It might happen, that command when run on an older kernel, gives you outdated entries. Therefore please be sure you base your patches on recent Linux kernel.
You missed at least devicetree list (maybe more), so this won't be tested by automated tooling. Performing review on untested code might be a waste of time, thus I will skip this patch entirely till you follow the process allowing the patch to be tested.
Please kindly resend and include all necessary To/Cc entries.
Best regards,
Krzysztof
Tomer Maimon
maintainerRe: [PATCH v6 2/3] dt-bindings: usb: ci-hdrc-usb2: add npcm750 and npcm845 compatible
Hi Krzysztof,
Thanks a lot for your comments, I really appreciate it!
I will run scripts/get_maintainers.pl to the latest kernel.
After running scripts/get_maintainers.pl do I need to send the patchset with resend on V6 or do I need to send V7 with the new maintainers list
Thanks,
Tomer
Quoted 22 lines · Krzysztof Kozlowski
Quoted 4 lines · Tomer Maimon
Add a compatible string for Nuvoton BMC NPCM750 and Nuvoton BMC NPCM845.
Signed-off-by Tomer Maimon <[email protected]>---
Please use
scripts/get_maintainers.plto get a list of necessary people and lists to CC. It might happen, that command when run on an older kernel, gives you outdated entries. Therefore please be sure you base your patches on recent Linux kernel.You missed at least devicetree list (maybe more), so this won't be tested by automated tooling. Performing review on untested code might be a waste of time, thus I will skip this patch entirely till you follow the process allowing the patch to be tested.
Please kindly resend and include all necessary To/Cc entries.
Best regards,
Krzysztof
Tomer Maimon
maintainerPATCH v6 3/3 usb: chipidea: Add support for NPCM
In reply to Tomer MaimonAdd Nuvoton NPCM BMC SoCs support to USB ChipIdea driver. NPCM SoC include ChipIdea IP block that used for USB device controller mode.
--- drivers/usb/chipidea/Kconfig | 4 + drivers/usb/chipidea/Makefile | 1 + drivers/usb/chipidea/ci_hdrc_npcm.c | 114 ++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 drivers/usb/chipidea/ci_hdrc_npcm.c
drivers/usb/chipidea/Kconfig +4 -0
@@ -43,6 +43,10 @@ config USB_CHIPIDEA_MSM tristate "Enable MSM hsusb glue driver" if EXPERT default USB_CHIPIDEA +config USB_CHIPIDEA_NPCM + tristate "Enable NPCM hsusb glue driver" if EXPERT + default USB_CHIPIDEA + config USB_CHIPIDEA_IMX tristate "Enable i.MX USB glue driver" if EXPERT depends on OF
drivers/usb/chipidea/Makefile +1 -0
@@ -13,6 +13,7 @@ ci_hdrc-$(CONFIG_USB_OTG_FSM) += otg_fsm.o obj-$(CONFIG_USB_CHIPIDEA_GENERIC) += ci_hdrc_usb2.o obj-$(CONFIG_USB_CHIPIDEA_MSM) += ci_hdrc_msm.o +obj-$(CONFIG_USB_CHIPIDEA_NPCM) += ci_hdrc_npcm.o obj-$(CONFIG_USB_CHIPIDEA_PCI) += ci_hdrc_pci.o obj-$(CONFIG_USB_CHIPIDEA_IMX) += usbmisc_imx.o ci_hdrc_imx.o obj-$(CONFIG_USB_CHIPIDEA_TEGRA) += ci_hdrc_tegra.o
drivers/usb/chipidea/ci_hdrc_npcm.c new file +114 -0
114 lines not on this page · raw message
Signature · 1 line
2.33.0
Re: [PATCH v6 3/3] usb: chipidea: Add support for NPCM
Dear Tomer,
Thank you for your patch.
Am 13.10.23 um 01:00 schrieb Tomer Maimon:
Quoted 2 lines
Add Nuvoton NPCM BMC SoCs support to USB ChipIdea driver. NPCM SoC include ChipIdea IP block that used for USB device controller
include*s*
“that *is* used” or just “… used for”
Quoted 1 line
mode.
Please add a line, how you tested this patch.
Quoted 63 lines
Signed-off-by Tomer Maimon <[email protected]>Acked-by Peter Chen <[email protected]>--- drivers/usb/chipidea/Kconfig | 4 + drivers/usb/chipidea/Makefile | 1 + drivers/usb/chipidea/ci_hdrc_npcm.c | 114 ++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+)create mode 100644
drivers/usb/chipidea/ci_hdrc_npcm.cdrivers/usb/chipidea/Kconfig +4
-0@@ -43,6 +43,10 @@ config USB_CHIPIDEA_MSM tristate "Enable MSM hsusb glue driver" if EXPERT default USB_CHIPIDEA +config USB_CHIPIDEA_NPCM + tristate "Enable NPCM hsusb glue driver" if EXPERT + default USB_CHIPIDEA + config USB_CHIPIDEA_IMX tristate "Enable i.MX USB glue driver" if EXPERT depends on OFdrivers/usb/chipidea/Makefile +1
-0@@ -13,6 +13,7 @@ ci_hdrc-$(CONFIG_USB_OTG_FSM) += otg_fsm.o obj-$(CONFIG_USB_CHIPIDEA_GENERIC) += ci_hdrc_usb2.o obj-$(CONFIG_USB_CHIPIDEA_MSM) += ci_hdrc_msm.o +obj-$(CONFIG_USB_CHIPIDEA_NPCM) += ci_hdrc_npcm.o obj-$(CONFIG_USB_CHIPIDEA_PCI) += ci_hdrc_pci.o obj-$(CONFIG_USB_CHIPIDEA_IMX) += usbmisc_imx.o ci_hdrc_imx.o obj-$(CONFIG_USB_CHIPIDEA_TEGRA) += ci_hdrc_tegra.odrivers/usb/chipidea/ci_hdrc_npcm.c new file +21
-0@@ -0,0 +1,114 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2023 Nuvoton Technology corporation. + +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/usb/chipidea.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/reset-controller.h> +#include <linux/of.h> + +#include "ci.h" + +struct npcm_udc_data { +struct platform_device *ci; +struct clk *core_clk; +struct ci_hdrc_platform_data pdata; +}; + +static int npcm_udc_notify_event (struct ci_hdrc *ci,unsigned event)
drivers/usb/chipidea/ci_hdrc_npcm.c line 31
Quoted 10 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +10
-0+{ +struct device *dev = ci->dev->parent; + +switch (event) { +case CI_HDRC_CONTROLLER_RESET_EVENT : +/* clear all mode bits */ +hw_write (ci,OP_USBMODE ,0xffffffff ,0x0 ); +break ; +default : +dev_dbg (dev,"unknown ci_hdrc event\n" );
Please print it out.
Quoted 72 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +72
-0+break ; + } + +return 0 ; +} + +static int npcm_udc_probe (struct platform_device *pdev) +{ +int ret; +struct npcm_udc_data *ci; +struct platform_device *plat_ci; +struct device *dev = &pdev->dev; + + ci =devm_kzalloc (&pdev->dev,sizeof (*ci),GFP_KERNEL ); +if (!ci) +return -ENOMEM ; +platform_set_drvdata (pdev, ci); + + ci->core_clk =devm_clk_get_optional (dev,NULL ); +if (IS_ERR (ci->core_clk)) +return PTR_ERR (ci->core_clk); + + ret =clk_prepare_enable (ci->core_clk); +if (ret) +return dev_err_probe (dev, ret,"failed to enable the clock: %d\n" , ret); + + ci->pdata.name =dev_name (dev); + ci->pdata.capoffset =DEF_CAPOFFSET ; + ci->pdata.flags =CI_HDRC_REQUIRES_ALIGNED_DMA | +CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS ; + ci->pdata.phy_mode =USBPHY_INTERFACE_MODE_UTMI ; + ci->pdata.notify_event = npcm_udc_notify_event; + + plat_ci =ci_hdrc_add_device (dev, pdev->resource, pdev->num_resources, + &ci->pdata); +if (IS_ERR (plat_ci)) { + ret =PTR_ERR (plat_ci); +dev_err (dev,"failed to register HDRC NPCM device: %d\n" , ret); + goto clk_err; + } + +pm_runtime_no_callbacks (dev); +pm_runtime_enable (dev); + +return 0 ; + +clk_err: +clk_disable_unprepare (ci->core_clk); +return ret; +} + +static int npcm_udc_remove (struct platform_device *pdev) +{ +struct npcm_udc_data *ci =platform_get_drvdata (pdev); + +pm_runtime_disable (&pdev->dev); +ci_hdrc_remove_device (ci->ci); +clk_disable_unprepare (ci->core_clk); + +return 0 ; +} + +static const struct of_device_id npcm_udc_dt_match[] = { + { .compatible ="nuvoton,npcm750-udc" , }, + { .compatible ="nuvoton,npcm845-udc" , }, + { } +}; +MODULE_DEVICE_TABLE (of, npcm_udc_dt_match); + +static struct platform_driver npcm_udc_driver = { + .probe = npcm_udc_probe, + .remove = npcm_udc_remove,
drivers/usb/chipidea/ci_hdrc_npcm.c line 113
Quoted 10 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +10
-0+ .driver = { + .name = "npcm_udc", + .of_match_table = npcm_udc_dt_match, + }, +}; + +module_platform_driver (npcm_udc_driver); + +MODULE_DESCRIPTION ("NPCM USB device controller driver" ); +MODULE_AUTHOR ("Tomer Maimon <[email protected]>" );
Should that address also be recorded as the patch author?
drivers/usb/chipidea/ci_hdrc_npcm.c line 114
Quoted 1 line
drivers/usb/chipidea/ci_hdrc_npcm.c new file +1
-0+MODULE_LICENSE ("GPL v2" );
Kind regards,
Paul
Tomer Maimon
maintainerRe: [PATCH v6 3/3] usb: chipidea: Add support for NPCM
Hi Paul,
Thanks for your comments
Quoted 4 lines · Paul Menzel
Dear Tomer,
Quoted 8 lines
Thank you for your patch.
Am 13.10.23 um 01:00 schrieb Tomer Maimon:
Quoted 2 lines
Add Nuvoton NPCM BMC SoCs support to USB ChipIdea driver. NPCM SoC include ChipIdea IP block that used for USB device controller
include*s*
“that *is* used” or just “… used for”
Will do
Quoted 4 lines
Quoted 2 lines
mode.
Please add a line, how you tested this patch.
I don't recall "how you tested the patch" done in the commit message, I can add it in the cover letter
Quoted 68 lines
Quoted 68 lines
Signed-off-by Tomer Maimon <[email protected]>Acked-by Peter Chen <[email protected]>--- drivers/usb/chipidea/Kconfig | 4 + drivers/usb/chipidea/Makefile | 1 + drivers/usb/chipidea/ci_hdrc_npcm.c | 114 ++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+)create mode 100644
drivers/usb/chipidea/ci_hdrc_npcm.cdrivers/usb/chipidea/Kconfig +4
-0@@ -43,6 +43,10 @@ config USB_CHIPIDEA_MSM tristate "Enable MSM hsusb glue driver" if EXPERT default USB_CHIPIDEA +config USB_CHIPIDEA_NPCM + tristate "Enable NPCM hsusb glue driver" if EXPERT + default USB_CHIPIDEA + config USB_CHIPIDEA_IMX tristate "Enable i.MX USB glue driver" if EXPERT depends on OFdrivers/usb/chipidea/Makefile +1
-0@@ -13,6 +13,7 @@ ci_hdrc-$(CONFIG_USB_OTG_FSM) += otg_fsm.o obj-$(CONFIG_USB_CHIPIDEA_GENERIC) += ci_hdrc_usb2.o obj-$(CONFIG_USB_CHIPIDEA_MSM) += ci_hdrc_msm.o +obj-$(CONFIG_USB_CHIPIDEA_NPCM) += ci_hdrc_npcm.o obj-$(CONFIG_USB_CHIPIDEA_PCI) += ci_hdrc_pci.o obj-$(CONFIG_USB_CHIPIDEA_IMX) += usbmisc_imx.o ci_hdrc_imx.o obj-$(CONFIG_USB_CHIPIDEA_TEGRA) += ci_hdrc_tegra.odrivers/usb/chipidea/ci_hdrc_npcm.c new file +25
-0@@ -0,0 +1,114 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2023 Nuvoton Technology corporation. + +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/usb/chipidea.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/reset-controller.h> +#include <linux/of.h> + +#include "ci.h" + +struct npcm_udc_data { +struct platform_device *ci; +struct clk *core_clk; +struct ci_hdrc_platform_data pdata; +}; + +static int npcm_udc_notify_event (struct ci_hdrc *ci,unsigned event) +{ +struct device *dev = ci->dev->parent; + +switch (event) {
Quoted 8 lines
drivers/usb/chipidea/ci_hdrc_npcm.c line 31
Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +6
-0+case CI_HDRC_CONTROLLER_RESET_EVENT : +/* clear all mode bits */ +hw_write (ci,OP_USBMODE ,0xffffffff ,0x0 ); +break ; +default : +dev_dbg (dev,"unknown ci_hdrc event\n" );Please print it out.
Do you mean instead dev_dbg to use dev_info? in that case, each event that didnt handled will cause a print.
Quoted 77 lines
Quoted 77 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +76
-0+break ; + } + +return 0 ; +} + +static int npcm_udc_probe (struct platform_device *pdev) +{ +int ret; +struct npcm_udc_data *ci; +struct platform_device *plat_ci; +struct device *dev = &pdev->dev; + + ci =devm_kzalloc (&pdev->dev,sizeof (*ci),GFP_KERNEL ); +if (!ci) +return -ENOMEM ; +platform_set_drvdata (pdev, ci); + + ci->core_clk =devm_clk_get_optional (dev,NULL ); +if (IS_ERR (ci->core_clk)) +return PTR_ERR (ci->core_clk); + + ret =clk_prepare_enable (ci->core_clk); +if (ret) +return dev_err_probe (dev, ret,"failed to enable the clock: %d\n" , ret); + + ci->pdata.name =dev_name (dev); + ci->pdata.capoffset =DEF_CAPOFFSET ; + ci->pdata.flags =CI_HDRC_REQUIRES_ALIGNED_DMA | +CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS ; + ci->pdata.phy_mode =USBPHY_INTERFACE_MODE_UTMI ; + ci->pdata.notify_event = npcm_udc_notify_event; + + plat_ci =ci_hdrc_add_device (dev, pdev->resource, pdev->num_resources, + &ci->pdata); +if (IS_ERR (plat_ci)) { + ret =PTR_ERR (plat_ci); +dev_err (dev,"failed to register HDRC NPCM device: %d\n" , ret); + goto clk_err; + } + +pm_runtime_no_callbacks (dev); +pm_runtime_enable (dev); + +return 0 ; + +clk_err: +clk_disable_unprepare (ci->core_clk); +return ret; +} + +static int npcm_udc_remove (struct platform_device *pdev) +{ +struct npcm_udc_data *ci =platform_get_drvdata (pdev); + +pm_runtime_disable (&pdev->dev); +ci_hdrc_remove_device (ci->ci); +clk_disable_unprepare (ci->core_clk); + +return 0 ; +} + +static const struct of_device_id npcm_udc_dt_match[] = { + { .compatible ="nuvoton,npcm750-udc" , }, + { .compatible ="nuvoton,npcm845-udc" , }, + { } +}; +MODULE_DEVICE_TABLE (of, npcm_udc_dt_match); + +static struct platform_driver npcm_udc_driver = { + .probe = npcm_udc_probe, + .remove = npcm_udc_remove, + .driver = { + .name ="npcm_udc" , + .of_match_table = npcm_udc_dt_match, + },
Quoted 8 lines
drivers/usb/chipidea/ci_hdrc_npcm.c line 113
Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +6
-0+}; + +module_platform_driver (npcm_udc_driver); + +MODULE_DESCRIPTION ("NPCM USB device controller driver" ); +MODULE_AUTHOR ("Tomer Maimon <[email protected]>" );Should that address also be recorded as the patch author?
I prefer to use this e-mail since this is my main e-mail.
Quoted 7 lines
drivers/usb/chipidea/ci_hdrc_npcm.c line 114
Quoted 2 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +1
-0+MODULE_LICENSE ("GPL v2" );Kind regards,
Paul
Best regards,
Tomer
Re: [PATCH v6 3/3] usb: chipidea: Add support for NPCM
Dear Tomer,
Am 15.10.23 um 19:21 schrieb Tomer Maimon:
Quoted 8 lines · Paul Menzel
Quoted 7 lines
Am 13.10.23 um 01:00 schrieb Tomer Maimon:
Quoted 2 lines
Add Nuvoton NPCM BMC SoCs support to USB ChipIdea driver. NPCM SoC include ChipIdea IP block that used for USB device controller
include*s*
“that *is* used” or just “… used for”
Quoted 7 lines
Will do
Quoted 4 lines
Quoted 2 lines
mode.
Please add a line, how you tested this patch.
I don't recall "how you tested the patch" done in the commit message, I can add it in the cover letter
In my opinion, adding a separate paragraph to the commit message would be best.
Quoted 75 lines
Quoted 67 lines
Quoted 67 lines
Signed-off-by Tomer Maimon <[email protected]>Acked-by Peter Chen <[email protected]>--- drivers/usb/chipidea/Kconfig | 4 + drivers/usb/chipidea/Makefile | 1 + drivers/usb/chipidea/ci_hdrc_npcm.c | 114 ++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+)create mode 100644
drivers/usb/chipidea/ci_hdrc_npcm.cdrivers/usb/chipidea/Kconfig +4
-0@@ -43,6 +43,10 @@ config USB_CHIPIDEA_MSM tristate "Enable MSM hsusb glue driver" if EXPERT default USB_CHIPIDEA +config USB_CHIPIDEA_NPCM + tristate "Enable NPCM hsusb glue driver" if EXPERT + default USB_CHIPIDEA + config USB_CHIPIDEA_IMX tristate "Enable i.MX USB glue driver" if EXPERT depends on OFdrivers/usb/chipidea/Makefile +1
-0@@ -13,6 +13,7 @@ ci_hdrc-$(CONFIG_USB_OTG_FSM) += otg_fsm.o obj-$(CONFIG_USB_CHIPIDEA_GENERIC) += ci_hdrc_usb2.o obj-$(CONFIG_USB_CHIPIDEA_MSM) += ci_hdrc_msm.o +obj-$(CONFIG_USB_CHIPIDEA_NPCM) += ci_hdrc_npcm.o obj-$(CONFIG_USB_CHIPIDEA_PCI) += ci_hdrc_pci.o obj-$(CONFIG_USB_CHIPIDEA_IMX) += usbmisc_imx.o ci_hdrc_imx.o obj-$(CONFIG_USB_CHIPIDEA_TEGRA) += ci_hdrc_tegra.odrivers/usb/chipidea/ci_hdrc_npcm.c new file +25
-0@@ -0,0 +1,114 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2023 Nuvoton Technology corporation. + +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/usb/chipidea.h> +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/reset-controller.h> +#include <linux/of.h> + +#include "ci.h" + +struct npcm_udc_data { +struct platform_device *ci; +struct clk *core_clk; +struct ci_hdrc_platform_data pdata; +}; + +static int npcm_udc_notify_event (struct ci_hdrc *ci,unsigned event) +{ +struct device *dev = ci->dev->parent; + +switch (event) {Quoted 8 lines
drivers/usb/chipidea/ci_hdrc_npcm.c line 31
Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +6
-0+case CI_HDRC_CONTROLLER_RESET_EVENT : +/* clear all mode bits */ +hw_write (ci,OP_USBMODE ,0xffffffff ,0x0 ); +break ; +default : +dev_dbg (dev,"unknown ci_hdrc event\n" );Please print it out.
Quoted 2 lines
Do you mean instead
dev_dbgto usedev_info? in that case, each event that didnt handled will cause a print.
Sorry for not being clear. I meant print out event.
Quoted 84 lines
Quoted 76 lines
Quoted 76 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +76
-0+break ; + } + +return 0 ; +} + +static int npcm_udc_probe (struct platform_device *pdev) +{ +int ret; +struct npcm_udc_data *ci; +struct platform_device *plat_ci; +struct device *dev = &pdev->dev; + + ci =devm_kzalloc (&pdev->dev,sizeof (*ci),GFP_KERNEL ); +if (!ci) +return -ENOMEM ; +platform_set_drvdata (pdev, ci); + + ci->core_clk =devm_clk_get_optional (dev,NULL ); +if (IS_ERR (ci->core_clk)) +return PTR_ERR (ci->core_clk); + + ret =clk_prepare_enable (ci->core_clk); +if (ret) +return dev_err_probe (dev, ret,"failed to enable the clock: %d\n" , ret); + + ci->pdata.name =dev_name (dev); + ci->pdata.capoffset =DEF_CAPOFFSET ; + ci->pdata.flags =CI_HDRC_REQUIRES_ALIGNED_DMA | +CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS ; + ci->pdata.phy_mode =USBPHY_INTERFACE_MODE_UTMI ; + ci->pdata.notify_event = npcm_udc_notify_event; + + plat_ci =ci_hdrc_add_device (dev, pdev->resource, pdev->num_resources, + &ci->pdata); +if (IS_ERR (plat_ci)) { + ret =PTR_ERR (plat_ci); +dev_err (dev,"failed to register HDRC NPCM device: %d\n" , ret); + goto clk_err; + } + +pm_runtime_no_callbacks (dev); +pm_runtime_enable (dev); + +return 0 ; + +clk_err: +clk_disable_unprepare (ci->core_clk); +return ret; +} + +static int npcm_udc_remove (struct platform_device *pdev) +{ +struct npcm_udc_data *ci =platform_get_drvdata (pdev); + +pm_runtime_disable (&pdev->dev); +ci_hdrc_remove_device (ci->ci); +clk_disable_unprepare (ci->core_clk); + +return 0 ; +} + +static const struct of_device_id npcm_udc_dt_match[] = { + { .compatible ="nuvoton,npcm750-udc" , }, + { .compatible ="nuvoton,npcm845-udc" , }, + { } +}; +MODULE_DEVICE_TABLE (of, npcm_udc_dt_match); + +static struct platform_driver npcm_udc_driver = { + .probe = npcm_udc_probe, + .remove = npcm_udc_remove, + .driver = { + .name ="npcm_udc" , + .of_match_table = npcm_udc_dt_match, + },Quoted 8 lines
drivers/usb/chipidea/ci_hdrc_npcm.c line 113
Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_npcm.c new file +6
-0+}; + +module_platform_driver (npcm_udc_driver); + +MODULE_DESCRIPTION ("NPCM USB device controller driver" ); +MODULE_AUTHOR ("Tomer Maimon <[email protected]>" );Should that address also be recorded as the patch author?
Quoted 1 line
I prefer to use this e-mail since this is my main e-mail.
Alright, if it’s fine with your employer that’s great.
Quoted 1 line
Quoted 1 line
drivers/usb/chipidea/ci_hdrc_npcm.c line 114
Quoted 1 line
drivers/usb/chipidea/ci_hdrc_npcm.c new file +1
-0+MODULE_LICENSE ("GPL v2" );
Kind regards,
Paul