The biggest problem requiring this split is the fact that consumer drivers poke around in struct phy, accessing fields which shouldn't be visible to them. Follow the example of mux, gpio, iio, spi offload, pwrsec, pinctrl and regulator, which each expose separate headers for consumers and providers.
Some off-list discussions were had with Vinod Koul regarding the 3 PHY providers outside the drivers/phy/ subsystem. It was agreed that it is desirable to relocate them to drivers/phy/, rather than to publish phy-provider.h to include/linux/phy/ for liberal use. Only phy.h and (new) phy-props.h - consumer-facing headers - stay there. The hope is that developers get a hint when they need to include the wrong header to get their job done. If that fails, patch 22/22 adds a regex in the MAINTAINERS entry that ensures linux-phy is copied on all Generic PHY patches, for an extra set of eyes. Requested merge strategy, I hope this works for everyone: - Subsystem maintainers ACK their affected portions - Entire series goes through linux-phy - linux-phy provides stable tag - Said tag is merged back into affected subsystem 'next' branches Cc: Abhinav Kumar <[email protected]> Cc: Alexandre Belloni <[email protected]> Cc: "André Draszik" <[email protected]> Cc: Andrew Lunn <[email protected]> Cc: Andrzej Hajda <[email protected]> Cc: Andy Yan <[email protected]> Cc: Bjorn Helgaas <[email protected]> Cc: Chen-Yu Tsai <[email protected]> Cc: Claudiu Beznea <[email protected]> Cc: Damien Le Moal <[email protected]> Cc: Daniel Machon <[email protected]> Cc: David Airlie <[email protected]> Cc: "David S. Miller" <[email protected]> Cc: Dmitry Baryshkov <[email protected]> Cc: Eric Dumazet <[email protected]> Cc: Fabio Estevam <[email protected]> Cc: Frank Li <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: "Heiko Stübner" <[email protected]> Cc: Heiko Stuebner <[email protected]> Cc: Inki Dae <[email protected]> Cc: Jagan Teki <[email protected]> Cc: Jakub Kicinski <[email protected]> Cc: Jernej Skrabec <[email protected]> Cc: Jessica Zhang <[email protected]> Cc: Jonas Karlman <[email protected]> Cc: Jonathan Hunter <[email protected]> Cc: Kevin Xie <[email protected]> Cc: Krzysztof Kozlowski <[email protected]> Cc: "Krzysztof Wilczyński" <[email protected]> Cc: Laurent Pinchart <[email protected]> Cc: Linus Walleij <[email protected]> Cc: Lorenzo Pieralisi <[email protected]> Cc: Maarten Lankhorst <[email protected]> Cc: Magnus Damm <[email protected]> Cc: Manivannan Sadhasivam <[email protected]> Cc: Marc Kleine-Budde <[email protected]> Cc: Marek Szyprowski <[email protected]> Cc: Marijn Suijten <[email protected]> Cc: Markus Schneider-Pargmann <[email protected]> Cc: Mauro Carvalho Chehab <[email protected]> Cc: Maxime Ripard <[email protected]> Cc: Michael Dege <[email protected]> Cc: Neil Armstrong <[email protected]> Cc: Nicolas Ferre <[email protected]> Cc: Niklas Cassel <[email protected]> Cc: Paolo Abeni <[email protected]> Cc: Pengutronix Kernel Team <[email protected]> Cc: Peter Chen <[email protected]> Cc: Peter Griffin <[email protected]> Cc: Rob Clark <[email protected]> Cc: Robert Foss <[email protected]> Cc: Rob Herring <[email protected]> Cc: "Russell King (Oracle)" <[email protected]> Cc: Samuel Holland <[email protected]> Cc: Sandy Huang <[email protected]> Cc: Sascha Hauer <[email protected]> Cc: Sean Paul <[email protected]> Cc: Sebastian Reichel <[email protected]> Cc: Shawn Guo <[email protected]> Cc: Shawn Lin <[email protected]> Cc: Simona Vetter <[email protected]> Cc: Steen Hegelund <[email protected]> Cc: Thierry Reding <[email protected]> Cc: Thinh Nguyen <[email protected]> Cc: Thomas Zimmermann <[email protected]> Cc: Tudor Ambarus <[email protected]> Cc: Vincent Mailhol <[email protected]> Cc: Yixun Lan <[email protected]> Cc: Yoshihiro Shimoda <[email protected]> Vladimir Oltean (22): ata: add <linux/pm_runtime.h> where missing PCI: add missing headers transitively included by <linux/phy/phy.h> usb: add missing headers transitively included by <linux/phy/phy.h> drm: add <linux/pm_runtime.h> where missing phy: add <linux/pm_runtime.h> where missing phy: spacemit: include missing <linux/phy/phy.h> net: lan969x: include missing <linux/of.h> PCI: remove device links to PHY ufs: exynos: stop poking into struct phy guts drm/rockchip: dw_hdmi: avoid direct dereference of phy->dev.of_node drm/msm/dp: remove debugging prints with internal struct phy state phy: move provider API out of public <linux/phy/phy.h> phy: introduce phy_get_max_link_rate() helper for consumers drm/rockchip: dsi: include PHY provider header drm: bridge: cdns-mhdp8546: use consumer API for getting PHY bus width media: sunxi: a83-mips-csi2: include PHY provider header net: renesas: rswitch: include PHY provider header pinctrl: tegra-xusb: include PHY provider header power: supply: cpcap-charger: include missing <linux/property.h> phy: include PHY provider header phy: remove temporary provider compatibility from consumer header MAINTAINERS: add regex for linux-phy MAINTAINERS | 1 + drivers/ata/ahci.c | 1 + drivers/ata/ahci_brcm.c | 1 + drivers/ata/ahci_ceva.c | 1 + drivers/ata/ahci_qoriq.c | 1 + drivers/ata/libahci.c | 1 + .../drm/bridge/analogix/analogix_dp_core.c | 1 + .../drm/bridge/cadence/cdns-mhdp8546-core.c | 7 +- drivers/gpu/drm/bridge/nwl-dsi.c | 1 + drivers/gpu/drm/bridge/samsung-dsim.c | 1 + drivers/gpu/drm/bridge/synopsys/dw-dp.c | 2 +- drivers/gpu/drm/msm/dp/dp_aux.c | 1 + drivers/gpu/drm/msm/dp/dp_ctrl.c | 18 - drivers/gpu/drm/rockchip/cdn-dp-core.c | 1 + .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 1 + drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 25 +- .../sun8i-a83t-mipi-csi2/sun8i_a83t_dphy.c | 2 +- drivers/net/can/at91_can.c | 2 +- drivers/net/can/flexcan/flexcan-core.c | 2 +- drivers/net/can/m_can/m_can_platform.c | 2 +- drivers/net/can/rcar/rcar_canfd.c | 2 +- .../microchip/sparx5/lan969x/lan969x_rgmii.c | 1 + drivers/net/ethernet/renesas/rswitch_main.c | 1 + drivers/pci/controller/cadence/pcie-cadence.c | 16 +- drivers/pci/controller/dwc/pci-dra7xx.c | 16 - drivers/pci/controller/dwc/pci-keystone.c | 32 +- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 1 + drivers/pci/controller/dwc/pcie-histb.c | 1 + drivers/pci/controller/dwc/pcie-qcom-ep.c | 1 + drivers/pci/controller/dwc/pcie-spacemit-k1.c | 2 + drivers/pci/controller/dwc/pcie-tegra194.c | 1 + drivers/pci/controller/pci-tegra.c | 1 + drivers/pci/controller/pcie-rockchip-host.c | 1 + drivers/pci/controller/plda/pcie-starfive.c | 1 + drivers/phy/allwinner/phy-sun4i-usb.c | 3 +- drivers/phy/allwinner/phy-sun50i-usb3.c | 3 +- drivers/phy/allwinner/phy-sun6i-mipi-dphy.c | 4 +- drivers/phy/allwinner/phy-sun9i-usb.c | 3 +- drivers/phy/amlogic/phy-meson-axg-mipi-dphy.c | 2 + .../amlogic/phy-meson-axg-mipi-pcie-analog.c | 3 +- drivers/phy/amlogic/phy-meson-axg-pcie.c | 2 + .../amlogic/phy-meson-g12a-mipi-dphy-analog.c | 3 +- drivers/phy/amlogic/phy-meson-g12a-usb2.c | 2 + .../phy/amlogic/phy-meson-g12a-usb3-pcie.c | 3 +- drivers/phy/amlogic/phy-meson-gxl-usb2.c | 3 +- drivers/phy/amlogic/phy-meson8-hdmi-tx.c | 3 +- drivers/phy/amlogic/phy-meson8b-usb2.c | 3 +- drivers/phy/apple/atc.c | 3 +- drivers/phy/broadcom/phy-bcm-cygnus-pcie.c | 3 +- drivers/phy/broadcom/phy-bcm-kona-usb2.c | 4 +- drivers/phy/broadcom/phy-bcm-ns-usb2.c | 3 +- drivers/phy/broadcom/phy-bcm-ns-usb3.c | 3 +- drivers/phy/broadcom/phy-bcm-ns2-pcie.c | 3 +- drivers/phy/broadcom/phy-bcm-ns2-usbdrd.c | 3 +- drivers/phy/broadcom/phy-bcm-sr-pcie.c | 3 +- drivers/phy/broadcom/phy-bcm-sr-usb.c | 3 +- drivers/phy/broadcom/phy-bcm63xx-usbh.c | 3 +- drivers/phy/broadcom/phy-brcm-sata.c | 3 +- drivers/phy/broadcom/phy-brcm-usb.c | 2 +- drivers/phy/cadence/cdns-dphy-rx.c | 3 +- drivers/phy/cadence/cdns-dphy.c | 4 +- drivers/phy/cadence/phy-cadence-salvo.c | 3 +- drivers/phy/cadence/phy-cadence-sierra.c | 3 +- drivers/phy/cadence/phy-cadence-torrent.c | 3 +- drivers/phy/canaan/phy-k230-usb.c | 3 +- drivers/phy/eswin/phy-eic7700-sata.c | 3 +- .../phy/freescale/phy-fsl-imx8-mipi-dphy.c | 3 +- drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 4 +- drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 3 +- drivers/phy/freescale/phy-fsl-imx8qm-hsio.c | 6 +- .../phy/freescale/phy-fsl-imx8qm-lvds-phy.c | 3 +- drivers/phy/freescale/phy-fsl-lynx-28g.c | 3 +- drivers/phy/hisilicon/phy-hi3660-usb3.c | 3 +- drivers/phy/hisilicon/phy-hi3670-pcie.c | 3 +- drivers/phy/hisilicon/phy-hi3670-usb3.c | 3 +- drivers/phy/hisilicon/phy-hi6220-usb.c | 3 +- drivers/phy/hisilicon/phy-hisi-inno-usb2.c | 4 +- drivers/phy/hisilicon/phy-histb-combphy.c | 3 +- drivers/phy/hisilicon/phy-hix5hd2-sata.c | 3 +- drivers/phy/ingenic/phy-ingenic-usb.c | 3 +- drivers/phy/intel/phy-intel-keembay-emmc.c | 3 +- drivers/phy/intel/phy-intel-keembay-usb.c | 3 +- drivers/phy/intel/phy-intel-lgm-combo.c | 4 +- drivers/phy/intel/phy-intel-lgm-emmc.c | 3 +- drivers/phy/lantiq/phy-lantiq-rcu-usb2.c | 3 +- drivers/phy/lantiq/phy-lantiq-vrx200-pcie.c | 4 +- drivers/phy/marvell/phy-armada375-usb2.c | 3 +- drivers/phy/marvell/phy-armada38x-comphy.c | 3 +- drivers/phy/marvell/phy-berlin-sata.c | 3 +- drivers/phy/marvell/phy-berlin-usb.c | 3 +- drivers/phy/marvell/phy-mmp3-hsic.c | 3 +- drivers/phy/marvell/phy-mmp3-usb.c | 3 +- drivers/phy/marvell/phy-mvebu-a3700-comphy.c | 3 +- drivers/phy/marvell/phy-mvebu-a3700-utmi.c | 3 +- drivers/phy/marvell/phy-mvebu-cp110-comphy.c | 3 +- drivers/phy/marvell/phy-mvebu-cp110-utmi.c | 3 +- drivers/phy/marvell/phy-mvebu-sata.c | 3 +- drivers/phy/marvell/phy-pxa-28nm-hsic.c | 3 +- drivers/phy/marvell/phy-pxa-28nm-usb2.c | 3 +- drivers/phy/marvell/phy-pxa-usb.c | 3 +- drivers/phy/mediatek/phy-mtk-dp.c | 3 +- drivers/phy/mediatek/phy-mtk-hdmi-mt8195.c | 1 - drivers/phy/mediatek/phy-mtk-hdmi.h | 3 +- drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 2 +- drivers/phy/mediatek/phy-mtk-mipi-dsi.h | 3 +- drivers/phy/mediatek/phy-mtk-pcie.c | 2 +- drivers/phy/mediatek/phy-mtk-tphy.c | 2 +- drivers/phy/mediatek/phy-mtk-ufs.c | 2 +- drivers/phy/mediatek/phy-mtk-xfi-tphy.c | 2 +- drivers/phy/mediatek/phy-mtk-xsphy.c | 2 +- drivers/phy/microchip/lan966x_serdes.c | 4 +- drivers/phy/microchip/sparx5_serdes.c | 2 +- drivers/phy/motorola/phy-cpcap-usb.c | 3 +- drivers/phy/motorola/phy-mapphone-mdm6600.c | 5 +- drivers/phy/mscc/phy-ocelot-serdes.c | 3 +- drivers/phy/nuvoton/phy-ma35d1-usb2.c | 3 +- drivers/phy/phy-airoha-pcie.c | 2 +- drivers/phy/phy-can-transceiver.c | 3 +- drivers/phy/phy-core-mipi-dphy.c | 4 +- drivers/phy/phy-core.c | 42 ++ drivers/phy/phy-google-usb.c | 4 +- drivers/phy/phy-lpc18xx-usb-otg.c | 3 +- drivers/phy/phy-nxp-ptn3222.c | 3 +- drivers/phy/phy-pistachio-usb.c | 4 +- drivers/phy/phy-provider.h | 256 +++++++++ drivers/phy/phy-snps-eusb2.c | 2 + drivers/phy/phy-xgene.c | 3 +- drivers/phy/qualcomm/phy-ath79-usb.c | 3 +- drivers/phy/qualcomm/phy-qcom-apq8064-sata.c | 3 +- drivers/phy/qualcomm/phy-qcom-edp.c | 3 +- .../phy/qualcomm/phy-qcom-eusb2-repeater.c | 3 +- drivers/phy/qualcomm/phy-qcom-ipq4019-usb.c | 3 +- drivers/phy/qualcomm/phy-qcom-ipq806x-sata.c | 3 +- drivers/phy/qualcomm/phy-qcom-ipq806x-usb.c | 3 +- drivers/phy/qualcomm/phy-qcom-m31-eusb2.c | 2 + drivers/phy/qualcomm/phy-qcom-m31.c | 3 +- drivers/phy/qualcomm/phy-qcom-pcie2.c | 3 +- drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 4 +- .../phy/qualcomm/phy-qcom-qmp-pcie-msm8996.c | 3 +- drivers/phy/qualcomm/phy-qcom-qmp-pcie.c | 3 +- drivers/phy/qualcomm/phy-qcom-qmp-ufs.c | 3 +- .../phy/qualcomm/phy-qcom-qmp-usb-legacy.c | 4 +- drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 4 +- drivers/phy/qualcomm/phy-qcom-qmp-usbc.c | 4 +- drivers/phy/qualcomm/phy-qcom-qusb2.c | 5 +- drivers/phy/qualcomm/phy-qcom-sgmii-eth.c | 3 +- drivers/phy/qualcomm/phy-qcom-snps-femto-v2.c | 4 +- .../phy/qualcomm/phy-qcom-uniphy-pcie-28lp.c | 3 +- drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c | 3 +- drivers/phy/qualcomm/phy-qcom-usb-hs.c | 3 +- drivers/phy/qualcomm/phy-qcom-usb-hsic.c | 3 +- drivers/phy/qualcomm/phy-qcom-usb-ss.c | 3 +- drivers/phy/ralink/phy-mt7621-pci.c | 3 +- drivers/phy/ralink/phy-ralink-usb.c | 3 +- drivers/phy/realtek/phy-rtk-usb2.c | 3 +- drivers/phy/realtek/phy-rtk-usb3.c | 3 +- drivers/phy/renesas/phy-rcar-gen2.c | 3 +- drivers/phy/renesas/phy-rcar-gen3-pcie.c | 4 +- drivers/phy/renesas/phy-rcar-gen3-usb2.c | 3 +- drivers/phy/renesas/phy-rcar-gen3-usb3.c | 3 +- drivers/phy/renesas/phy-rzg3e-usb3.c | 3 +- drivers/phy/renesas/r8a779f0-ether-serdes.c | 4 +- drivers/phy/rockchip/phy-rockchip-dp.c | 3 +- drivers/phy/rockchip/phy-rockchip-dphy-rx0.c | 3 +- drivers/phy/rockchip/phy-rockchip-emmc.c | 3 +- .../phy/rockchip/phy-rockchip-inno-csidphy.c | 3 +- .../phy/rockchip/phy-rockchip-inno-dsidphy.c | 4 +- drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 2 + drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 3 +- .../rockchip/phy-rockchip-naneng-combphy.c | 3 +- drivers/phy/rockchip/phy-rockchip-pcie.c | 2 +- .../phy/rockchip/phy-rockchip-samsung-dcphy.c | 3 +- .../phy/rockchip/phy-rockchip-samsung-hdptx.c | 2 + .../phy/rockchip/phy-rockchip-snps-pcie3.c | 3 +- drivers/phy/rockchip/phy-rockchip-typec.c | 5 +- drivers/phy/rockchip/phy-rockchip-usb.c | 3 +- drivers/phy/rockchip/phy-rockchip-usbdp.c | 2 + drivers/phy/samsung/phy-exynos-dp-video.c | 3 +- drivers/phy/samsung/phy-exynos-mipi-video.c | 3 +- drivers/phy/samsung/phy-exynos-pcie.c | 3 +- drivers/phy/samsung/phy-exynos4210-usb2.c | 3 +- drivers/phy/samsung/phy-exynos4x12-usb2.c | 3 +- drivers/phy/samsung/phy-exynos5-usbdrd.c | 2 + drivers/phy/samsung/phy-exynos5250-sata.c | 3 +- drivers/phy/samsung/phy-exynos5250-usb2.c | 3 +- drivers/phy/samsung/phy-s5pv210-usb2.c | 3 +- drivers/phy/samsung/phy-samsung-ufs.c | 2 +- drivers/phy/samsung/phy-samsung-ufs.h | 3 +- drivers/phy/samsung/phy-samsung-usb2.c | 2 + drivers/phy/samsung/phy-samsung-usb2.h | 3 +- drivers/phy/socionext/phy-uniphier-ahci.c | 3 +- drivers/phy/socionext/phy-uniphier-pcie.c | 3 +- drivers/phy/socionext/phy-uniphier-usb2.c | 3 +- drivers/phy/socionext/phy-uniphier-usb3hs.c | 3 +- drivers/phy/socionext/phy-uniphier-usb3ss.c | 3 +- drivers/phy/sophgo/phy-cv1800-usb2.c | 3 +- drivers/phy/spacemit/phy-k1-pcie.c | 4 +- drivers/phy/spacemit/phy-k1-usb2.c | 2 + drivers/phy/st/phy-miphy28lp.c | 4 +- drivers/phy/st/phy-spear1310-miphy.c | 3 +- drivers/phy/st/phy-spear1340-miphy.c | 3 +- drivers/phy/st/phy-stih407-usb.c | 3 +- drivers/phy/st/phy-stm32-combophy.c | 3 +- drivers/phy/st/phy-stm32-usbphyc.c | 2 + drivers/phy/starfive/phy-jh7110-dphy-rx.c | 3 +- drivers/phy/starfive/phy-jh7110-dphy-tx.c | 3 +- drivers/phy/starfive/phy-jh7110-pcie.c | 3 +- drivers/phy/starfive/phy-jh7110-usb.c | 3 +- drivers/phy/sunplus/phy-sunplus-usb2.c | 3 +- drivers/phy/tegra/phy-tegra194-p2u.c | 3 +- drivers/phy/tegra/xusb-tegra124.c | 2 +- drivers/phy/tegra/xusb-tegra186.c | 2 +- drivers/phy/tegra/xusb-tegra210.c | 2 +- drivers/phy/tegra/xusb.c | 2 +- drivers/phy/ti/phy-am654-serdes.c | 3 +- drivers/phy/ti/phy-da8xx-usb.c | 3 +- drivers/phy/ti/phy-dm816x-usb.c | 3 +- drivers/phy/ti/phy-gmii-sel.c | 3 +- drivers/phy/ti/phy-omap-usb2.c | 3 +- drivers/phy/ti/phy-ti-pipe3.c | 3 +- drivers/phy/ti/phy-tusb1210.c | 1 + drivers/phy/ti/phy-twl4030-usb.c | 3 +- drivers/phy/xilinx/phy-zynqmp.c | 4 +- drivers/pinctrl/tegra/pinctrl-tegra-xusb.c | 2 +- drivers/power/supply/cpcap-charger.c | 1 + drivers/ufs/host/ufs-exynos.c | 17 +- drivers/ufs/host/ufs-exynos.h | 1 + drivers/usb/chipidea/ci_hdrc_imx.c | 1 + drivers/usb/core/hcd.c | 1 + drivers/usb/dwc3/dwc3-generic-plat.c | 1 + drivers/usb/dwc3/gadget.c | 1 + include/linux/phy/phy-props.h | 75 +++ include/linux/phy/phy-sun4i-usb.h | 2 +- include/linux/phy/phy.h | 497 ++++-------------- include/linux/phy/ulpi_phy.h | 2 +- 235 files changed, 915 insertions(+), 694 deletions(-) create mode 100644 drivers/phy/phy-provider.h create mode 100644 include/linux/phy/phy-props.h -- 2.43.0
