phy: core: rework phy_set_mode to accept phy mode and submode
authorGrygorii Strashko <grygorii.strashko@ti.com>
Tue, 20 Nov 2018 01:24:20 +0000 (19:24 -0600)
committerKishon Vijay Abraham I <kishon@ti.com>
Wed, 12 Dec 2018 04:31:33 +0000 (10:01 +0530)
commit79a5a18aa9d1062205cdcfa183d4cd5241d1b8da
tree5a3f45db4914c1bd127adabeb86144e35bbfad3a
parent640ac14744862b8b95652e7bc38b4ee987fa5eaf
phy: core: rework phy_set_mode to accept phy mode and submode

Currently the attempt to add support for Ethernet interface mode PHY
(MII/GMII/RGMII) will lead to the necessity of extending enum phy_mode and
duplicate there values from phy_interface_t enum (or introduce more PHY
callbacks) [1]. Both approaches are ineffective and would lead to fast
bloating of enum phy_mode or struct phy_ops in the process of adding more
PHYs for different subsystems which will make them unmaintainable.

As discussed in [1] the solution could be to introduce dual level PHYs mode
configuration - PHY mode and PHY submode. The PHY mode will define generic
PHY type (subsystem - PCIE/ETHERNET/USB_) while the PHY submode - subsystem
specific interface mode. The last is usually already defined in
corresponding subsystem headers (phy_interface_t for Ethernet, enum
usb_device_speed for USB).

This patch is cumulative change which refactors PHY framework code to
support dual level PHYs mode configuration - PHY mode and PHY submode. It
extends .set_mode() callback to support additional parameter "int submode"
and converts all corresponding PHY drivers to support new .set_mode()
callback declaration.
The new extended PHY API
 int phy_set_mode_ext(struct phy *phy, enum phy_mode mode, int submode)
is introduced to support dual level PHYs mode configuration and existing
phy_set_mode() API is converted to macros, so PHY framework consumers do
not need to be changed (~21 matches).

[1] http://lkml.kernel.org/r/d63588f6-9ab0-848a-5ad4-8073143bd95d@ti.com
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
16 files changed:
drivers/phy/allwinner/phy-sun4i-usb.c
drivers/phy/amlogic/phy-meson-gxl-usb2.c
drivers/phy/amlogic/phy-meson-gxl-usb3.c
drivers/phy/marvell/phy-mvebu-cp110-comphy.c
drivers/phy/mediatek/phy-mtk-tphy.c
drivers/phy/mediatek/phy-mtk-xsphy.c
drivers/phy/mscc/phy-ocelot-serdes.c
drivers/phy/phy-core.c
drivers/phy/qualcomm/phy-qcom-qmp.c
drivers/phy/qualcomm/phy-qcom-qusb2.c
drivers/phy/qualcomm/phy-qcom-ufs-qmp-14nm.c
drivers/phy/qualcomm/phy-qcom-ufs-qmp-20nm.c
drivers/phy/qualcomm/phy-qcom-usb-hs.c
drivers/phy/ti/phy-da8xx-usb.c
drivers/phy/ti/phy-tusb1210.c
include/linux/phy/phy.h