* [PATCH v3 0/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Adding a new driver for the MIPI CSI CD-PHY module v 0.5 embedded in some Mediatek soc, such as the MT8365 This driver was adapted from https://patchwork.kernel.org/project/linux-mediatek/cover/20200708104023.3225-1-louis.kuo@mediatek.com/ v1 can be found here: https://lore.kernel.org/all/20230403071929.360911-1-jstephan@baylibre.com/ v2 can be found here: https://lore.kernel.org/all/20230515090551.1251389-1-jstephan@baylibre.com/ Changelog Changes in v3: Binding file: - rename compatible string mediatek,phy-mipi-csi-0-5 -> mediatek,mt8365-csi-rx - rename binding file to be as compatible string - change property mediatek,is_cdphy -> mediatek,phy-type using an enum value instead of boolean for scalability - remove status property from example nodes - rename example node name 'mipi_rx_csi0: mipi_rx_csi0@11c10000' -> 'csi0_rx: phy@11c10000' - put reg address in lower case include/dt-bindings/phy/phy.h: - add PHY_TYPE_CDPHY definition Driver: - rename compatible string - rename property mediatek,is_cdphy -> mediatek,phy-type - rename CSIx* macro to CSIX* (x -> X) - fix style issue on the driver data structure - update MODULE_DESCRIPTION as suggested by Angelo and update the kconfig module description to match it - add dphy /cdphy eq tuning function to factor the code and increase readability - fix typo __PHY_MTK__MIPI_CSI__C_0_5_RX_REG_H_ --> __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H_ - reword commit message to update my contributions - added missing copyright - added module name in Kconfig Changes in v2: - fix all comments on bindings - move the binding chunk from driver to binding commit - fix dt_binding_check error (reported by DT_CHECKER_FLAGS) - use a more generic compatible string - add a new dt properties to simplify the driver "mediatek,is_cdphy" - rename the driver and the corresponding file to include version - drop of_match_ptr() - use devm_platform_ioremap_resource - use phy-mtk-io.h api instead of regmap - rework the driver to use dt nodes to declare PHY instead of an array in the driver - remove useless define for unused registers - remove support for CSI0A/B because it cannot be tested, and it simplifies the driver for a first review - edit commit message and bindings to be more descriptive about the hardware Florian Sylvestre (1): dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 Julien Stephan (1): dt-bindings: phy: add PHY_TYPE_CDPHY definition Phi-bang Nguyen (1): phy: mtk-mipi-csi: add driver for CSI phy .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 68 +++++ MAINTAINERS | 7 + drivers/phy/mediatek/Kconfig | 8 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 58 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 272 ++++++++++++++++++ include/dt-bindings/phy/phy.h | 3 +- 7 files changed, 417 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c -- 2.40.1 ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 0/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, Matthias Brugger, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, Julien Stephan, linux-arm-kernel, AngeloGioacchino Del Regno Adding a new driver for the MIPI CSI CD-PHY module v 0.5 embedded in some Mediatek soc, such as the MT8365 This driver was adapted from https://patchwork.kernel.org/project/linux-mediatek/cover/20200708104023.3225-1-louis.kuo@mediatek.com/ v1 can be found here: https://lore.kernel.org/all/20230403071929.360911-1-jstephan@baylibre.com/ v2 can be found here: https://lore.kernel.org/all/20230515090551.1251389-1-jstephan@baylibre.com/ Changelog Changes in v3: Binding file: - rename compatible string mediatek,phy-mipi-csi-0-5 -> mediatek,mt8365-csi-rx - rename binding file to be as compatible string - change property mediatek,is_cdphy -> mediatek,phy-type using an enum value instead of boolean for scalability - remove status property from example nodes - rename example node name 'mipi_rx_csi0: mipi_rx_csi0@11c10000' -> 'csi0_rx: phy@11c10000' - put reg address in lower case include/dt-bindings/phy/phy.h: - add PHY_TYPE_CDPHY definition Driver: - rename compatible string - rename property mediatek,is_cdphy -> mediatek,phy-type - rename CSIx* macro to CSIX* (x -> X) - fix style issue on the driver data structure - update MODULE_DESCRIPTION as suggested by Angelo and update the kconfig module description to match it - add dphy /cdphy eq tuning function to factor the code and increase readability - fix typo __PHY_MTK__MIPI_CSI__C_0_5_RX_REG_H_ --> __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H_ - reword commit message to update my contributions - added missing copyright - added module name in Kconfig Changes in v2: - fix all comments on bindings - move the binding chunk from driver to binding commit - fix dt_binding_check error (reported by DT_CHECKER_FLAGS) - use a more generic compatible string - add a new dt properties to simplify the driver "mediatek,is_cdphy" - rename the driver and the corresponding file to include version - drop of_match_ptr() - use devm_platform_ioremap_resource - use phy-mtk-io.h api instead of regmap - rework the driver to use dt nodes to declare PHY instead of an array in the driver - remove useless define for unused registers - remove support for CSI0A/B because it cannot be tested, and it simplifies the driver for a first review - edit commit message and bindings to be more descriptive about the hardware Florian Sylvestre (1): dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 Julien Stephan (1): dt-bindings: phy: add PHY_TYPE_CDPHY definition Phi-bang Nguyen (1): phy: mtk-mipi-csi: add driver for CSI phy .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 68 +++++ MAINTAINERS | 7 + drivers/phy/mediatek/Kconfig | 8 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 58 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 272 ++++++++++++++++++ include/dt-bindings/phy/phy.h | 3 +- 7 files changed, 417 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c -- 2.40.1 ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 0/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Adding a new driver for the MIPI CSI CD-PHY module v 0.5 embedded in some Mediatek soc, such as the MT8365 This driver was adapted from https://patchwork.kernel.org/project/linux-mediatek/cover/20200708104023.3225-1-louis.kuo@mediatek.com/ v1 can be found here: https://lore.kernel.org/all/20230403071929.360911-1-jstephan@baylibre.com/ v2 can be found here: https://lore.kernel.org/all/20230515090551.1251389-1-jstephan@baylibre.com/ Changelog Changes in v3: Binding file: - rename compatible string mediatek,phy-mipi-csi-0-5 -> mediatek,mt8365-csi-rx - rename binding file to be as compatible string - change property mediatek,is_cdphy -> mediatek,phy-type using an enum value instead of boolean for scalability - remove status property from example nodes - rename example node name 'mipi_rx_csi0: mipi_rx_csi0@11c10000' -> 'csi0_rx: phy@11c10000' - put reg address in lower case include/dt-bindings/phy/phy.h: - add PHY_TYPE_CDPHY definition Driver: - rename compatible string - rename property mediatek,is_cdphy -> mediatek,phy-type - rename CSIx* macro to CSIX* (x -> X) - fix style issue on the driver data structure - update MODULE_DESCRIPTION as suggested by Angelo and update the kconfig module description to match it - add dphy /cdphy eq tuning function to factor the code and increase readability - fix typo __PHY_MTK__MIPI_CSI__C_0_5_RX_REG_H_ --> __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H_ - reword commit message to update my contributions - added missing copyright - added module name in Kconfig Changes in v2: - fix all comments on bindings - move the binding chunk from driver to binding commit - fix dt_binding_check error (reported by DT_CHECKER_FLAGS) - use a more generic compatible string - add a new dt properties to simplify the driver "mediatek,is_cdphy" - rename the driver and the corresponding file to include version - drop of_match_ptr() - use devm_platform_ioremap_resource - use phy-mtk-io.h api instead of regmap - rework the driver to use dt nodes to declare PHY instead of an array in the driver - remove useless define for unused registers - remove support for CSI0A/B because it cannot be tested, and it simplifies the driver for a first review - edit commit message and bindings to be more descriptive about the hardware Florian Sylvestre (1): dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 Julien Stephan (1): dt-bindings: phy: add PHY_TYPE_CDPHY definition Phi-bang Nguyen (1): phy: mtk-mipi-csi: add driver for CSI phy .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 68 +++++ MAINTAINERS | 7 + drivers/phy/mediatek/Kconfig | 8 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 58 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 272 ++++++++++++++++++ include/dt-bindings/phy/phy.h | 3 +- 7 files changed, 417 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c -- 2.40.1 ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 0/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Adding a new driver for the MIPI CSI CD-PHY module v 0.5 embedded in some Mediatek soc, such as the MT8365 This driver was adapted from https://patchwork.kernel.org/project/linux-mediatek/cover/20200708104023.3225-1-louis.kuo@mediatek.com/ v1 can be found here: https://lore.kernel.org/all/20230403071929.360911-1-jstephan@baylibre.com/ v2 can be found here: https://lore.kernel.org/all/20230515090551.1251389-1-jstephan@baylibre.com/ Changelog Changes in v3: Binding file: - rename compatible string mediatek,phy-mipi-csi-0-5 -> mediatek,mt8365-csi-rx - rename binding file to be as compatible string - change property mediatek,is_cdphy -> mediatek,phy-type using an enum value instead of boolean for scalability - remove status property from example nodes - rename example node name 'mipi_rx_csi0: mipi_rx_csi0@11c10000' -> 'csi0_rx: phy@11c10000' - put reg address in lower case include/dt-bindings/phy/phy.h: - add PHY_TYPE_CDPHY definition Driver: - rename compatible string - rename property mediatek,is_cdphy -> mediatek,phy-type - rename CSIx* macro to CSIX* (x -> X) - fix style issue on the driver data structure - update MODULE_DESCRIPTION as suggested by Angelo and update the kconfig module description to match it - add dphy /cdphy eq tuning function to factor the code and increase readability - fix typo __PHY_MTK__MIPI_CSI__C_0_5_RX_REG_H_ --> __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H_ - reword commit message to update my contributions - added missing copyright - added module name in Kconfig Changes in v2: - fix all comments on bindings - move the binding chunk from driver to binding commit - fix dt_binding_check error (reported by DT_CHECKER_FLAGS) - use a more generic compatible string - add a new dt properties to simplify the driver "mediatek,is_cdphy" - rename the driver and the corresponding file to include version - drop of_match_ptr() - use devm_platform_ioremap_resource - use phy-mtk-io.h api instead of regmap - rework the driver to use dt nodes to declare PHY instead of an array in the driver - remove useless define for unused registers - remove support for CSI0A/B because it cannot be tested, and it simplifies the driver for a first review - edit commit message and bindings to be more descriptive about the hardware Florian Sylvestre (1): dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 Julien Stephan (1): dt-bindings: phy: add PHY_TYPE_CDPHY definition Phi-bang Nguyen (1): phy: mtk-mipi-csi: add driver for CSI phy .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 68 +++++ MAINTAINERS | 7 + drivers/phy/mediatek/Kconfig | 8 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 58 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 272 ++++++++++++++++++ include/dt-bindings/phy/phy.h | 3 +- 7 files changed, 417 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c -- 2.40.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 0/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Adding a new driver for the MIPI CSI CD-PHY module v 0.5 embedded in some Mediatek soc, such as the MT8365 This driver was adapted from https://patchwork.kernel.org/project/linux-mediatek/cover/20200708104023.3225-1-louis.kuo@mediatek.com/ v1 can be found here: https://lore.kernel.org/all/20230403071929.360911-1-jstephan@baylibre.com/ v2 can be found here: https://lore.kernel.org/all/20230515090551.1251389-1-jstephan@baylibre.com/ Changelog Changes in v3: Binding file: - rename compatible string mediatek,phy-mipi-csi-0-5 -> mediatek,mt8365-csi-rx - rename binding file to be as compatible string - change property mediatek,is_cdphy -> mediatek,phy-type using an enum value instead of boolean for scalability - remove status property from example nodes - rename example node name 'mipi_rx_csi0: mipi_rx_csi0@11c10000' -> 'csi0_rx: phy@11c10000' - put reg address in lower case include/dt-bindings/phy/phy.h: - add PHY_TYPE_CDPHY definition Driver: - rename compatible string - rename property mediatek,is_cdphy -> mediatek,phy-type - rename CSIx* macro to CSIX* (x -> X) - fix style issue on the driver data structure - update MODULE_DESCRIPTION as suggested by Angelo and update the kconfig module description to match it - add dphy /cdphy eq tuning function to factor the code and increase readability - fix typo __PHY_MTK__MIPI_CSI__C_0_5_RX_REG_H_ --> __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H_ - reword commit message to update my contributions - added missing copyright - added module name in Kconfig Changes in v2: - fix all comments on bindings - move the binding chunk from driver to binding commit - fix dt_binding_check error (reported by DT_CHECKER_FLAGS) - use a more generic compatible string - add a new dt properties to simplify the driver "mediatek,is_cdphy" - rename the driver and the corresponding file to include version - drop of_match_ptr() - use devm_platform_ioremap_resource - use phy-mtk-io.h api instead of regmap - rework the driver to use dt nodes to declare PHY instead of an array in the driver - remove useless define for unused registers - remove support for CSI0A/B because it cannot be tested, and it simplifies the driver for a first review - edit commit message and bindings to be more descriptive about the hardware Florian Sylvestre (1): dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 Julien Stephan (1): dt-bindings: phy: add PHY_TYPE_CDPHY definition Phi-bang Nguyen (1): phy: mtk-mipi-csi: add driver for CSI phy .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 68 +++++ MAINTAINERS | 7 + drivers/phy/mediatek/Kconfig | 8 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 58 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 272 ++++++++++++++++++ include/dt-bindings/phy/phy.h | 3 +- 7 files changed, 417 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c -- 2.40.1 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition 2023-05-24 8:30 ` Julien Stephan ` (2 preceding siblings ...) (?) @ 2023-05-24 8:30 ` Julien Stephan -1 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Add definition for CDPHY phy type that can be configured in either D-PHY mode or C-PHY mode Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- include/dt-bindings/phy/phy.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h index 6b901b342348..a19d85dbbf16 100644 --- a/include/dt-bindings/phy/phy.h +++ b/include/dt-bindings/phy/phy.h @@ -23,5 +23,6 @@ #define PHY_TYPE_DPHY 10 #define PHY_TYPE_CPHY 11 #define PHY_TYPE_USXGMII 12 +#define PHY_TYPE_CDPHY 13 #endif /* _DT_BINDINGS_PHY */ -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, Matthias Brugger, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, Julien Stephan, linux-arm-kernel, AngeloGioacchino Del Regno Add definition for CDPHY phy type that can be configured in either D-PHY mode or C-PHY mode Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- include/dt-bindings/phy/phy.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h index 6b901b342348..a19d85dbbf16 100644 --- a/include/dt-bindings/phy/phy.h +++ b/include/dt-bindings/phy/phy.h @@ -23,5 +23,6 @@ #define PHY_TYPE_DPHY 10 #define PHY_TYPE_CPHY 11 #define PHY_TYPE_USXGMII 12 +#define PHY_TYPE_CDPHY 13 #endif /* _DT_BINDINGS_PHY */ -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Add definition for CDPHY phy type that can be configured in either D-PHY mode or C-PHY mode Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- include/dt-bindings/phy/phy.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h index 6b901b342348..a19d85dbbf16 100644 --- a/include/dt-bindings/phy/phy.h +++ b/include/dt-bindings/phy/phy.h @@ -23,5 +23,6 @@ #define PHY_TYPE_DPHY 10 #define PHY_TYPE_CPHY 11 #define PHY_TYPE_USXGMII 12 +#define PHY_TYPE_CDPHY 13 #endif /* _DT_BINDINGS_PHY */ -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Add definition for CDPHY phy type that can be configured in either D-PHY mode or C-PHY mode Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- include/dt-bindings/phy/phy.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h index 6b901b342348..a19d85dbbf16 100644 --- a/include/dt-bindings/phy/phy.h +++ b/include/dt-bindings/phy/phy.h @@ -23,5 +23,6 @@ #define PHY_TYPE_DPHY 10 #define PHY_TYPE_CPHY 11 #define PHY_TYPE_USXGMII 12 +#define PHY_TYPE_CDPHY 13 #endif /* _DT_BINDINGS_PHY */ -- 2.40.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Add definition for CDPHY phy type that can be configured in either D-PHY mode or C-PHY mode Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- include/dt-bindings/phy/phy.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h index 6b901b342348..a19d85dbbf16 100644 --- a/include/dt-bindings/phy/phy.h +++ b/include/dt-bindings/phy/phy.h @@ -23,5 +23,6 @@ #define PHY_TYPE_DPHY 10 #define PHY_TYPE_CPHY 11 #define PHY_TYPE_USXGMII 12 +#define PHY_TYPE_CDPHY 13 #endif /* _DT_BINDINGS_PHY */ -- 2.40.1 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition 2023-05-24 8:30 ` Julien Stephan (?) (?) @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno -1 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Il 24/05/23 10:30, Julien Stephan ha scritto: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 > > #endif /* _DT_BINDINGS_PHY */ ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno 0 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, linux-arm-kernel, Matthias Brugger Il 24/05/23 10:30, Julien Stephan ha scritto: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 > > #endif /* _DT_BINDINGS_PHY */ ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno 0 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Il 24/05/23 10:30, Julien Stephan ha scritto: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 > > #endif /* _DT_BINDINGS_PHY */ _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno 0 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Il 24/05/23 10:30, Julien Stephan ha scritto: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 > > #endif /* _DT_BINDINGS_PHY */ -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition 2023-05-24 8:30 ` Julien Stephan (?) (?) @ 2023-06-03 19:09 ` Krzysztof Kozlowski -1 siblings, 0 replies; 40+ messages in thread From: Krzysztof Kozlowski @ 2023-06-03 19:09 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul On 24/05/2023 10:30, Julien Stephan wrote: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 I don't think there is CD phy. It is D-PHY or C-PHY. This is not for all possible combinations but just types of phy. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-06-03 19:09 ` Krzysztof Kozlowski 0 siblings, 0 replies; 40+ messages in thread From: Krzysztof Kozlowski @ 2023-06-03 19:09 UTC (permalink / raw) To: Julien Stephan Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, Matthias Brugger, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, linux-arm-kernel, AngeloGioacchino Del Regno On 24/05/2023 10:30, Julien Stephan wrote: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 I don't think there is CD phy. It is D-PHY or C-PHY. This is not for all possible combinations but just types of phy. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-06-03 19:09 ` Krzysztof Kozlowski 0 siblings, 0 replies; 40+ messages in thread From: Krzysztof Kozlowski @ 2023-06-03 19:09 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul On 24/05/2023 10:30, Julien Stephan wrote: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 I don't think there is CD phy. It is D-PHY or C-PHY. This is not for all possible combinations but just types of phy. Best regards, Krzysztof _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition @ 2023-06-03 19:09 ` Krzysztof Kozlowski 0 siblings, 0 replies; 40+ messages in thread From: Krzysztof Kozlowski @ 2023-06-03 19:09 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul On 24/05/2023 10:30, Julien Stephan wrote: > Add definition for CDPHY phy type that can be configured in either D-PHY > mode or C-PHY mode > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > include/dt-bindings/phy/phy.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/dt-bindings/phy/phy.h b/include/dt-bindings/phy/phy.h > index 6b901b342348..a19d85dbbf16 100644 > --- a/include/dt-bindings/phy/phy.h > +++ b/include/dt-bindings/phy/phy.h > @@ -23,5 +23,6 @@ > #define PHY_TYPE_DPHY 10 > #define PHY_TYPE_CPHY 11 > #define PHY_TYPE_USXGMII 12 > +#define PHY_TYPE_CDPHY 13 I don't think there is CD phy. It is D-PHY or C-PHY. This is not for all possible combinations but just types of phy. Best regards, Krzysztof -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 2023-05-24 8:30 ` Julien Stephan ` (2 preceding siblings ...) (?) @ 2023-05-24 8:30 ` Julien Stephan -1 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Florian Sylvestre, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Florian Sylvestre <fsylvestre@baylibre.com> This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in some Mediatek soc, such as the mt8365 Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ MAINTAINERS | 6 ++ 2 files changed, 73 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml new file mode 100644 index 000000000000..a1bd96a98051 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (c) 2023 MediaTek, BayLibre +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mediatek Sensor Interface MIPI CSI CD-PHY + +maintainers: + - Julien Stephan <jstephan@baylibre.com> + - Andy Hsieh <andy.hsieh@mediatek.com> + +description: + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 + receivers. The number of PHYs depends on the SoC model. + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only + capable. + +properties: + compatible: + enum: + - mediatek,mt8365-csi-rx + + reg: + maxItems: 1 + + '#phy-cells': + const: 0 + + mediatek,phy-type: + description: + Specify the phy type. Supported phy are D-PHY only or CD-PHY capable phys. + See include/dt-bindings/phy/phy.h for constants. + enum: [10, 13] + $ref: /schemas/types.yaml#/definitions/uint32 + +required: + - compatible + - reg + - mediatek,phy-type + - '#phy-cells' + +additionalProperties: false + +examples: + - | + #include <dt-bindings/phy/phy.h> + soc { + #address-cells = <2>; + #size-cells = <2>; + + csi0_rx: phy@11c10000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c10000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_CDPHY>; + #phy-cells = <0>; + }; + + csi1_rx: phy@11c12000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c12000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_DPHY>; + #phy-cells = <0>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index b81e9fcc66cb..5da594fbb761 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13184,6 +13184,12 @@ F: Documentation/devicetree/bindings/media/mediatek-vpu.txt F: drivers/media/platform/mediatek/vcodec/ F: drivers/media/platform/mediatek/vpu/ +MEDIATEK MIPI-CSI CDPHY DRIVER +M: Julien Stephan <jstephan@baylibre.com> +M: Andy Hsieh <andy.hsieh@mediatek.com> +S: Supported +F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml + MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> S: Maintained -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, Matthias Brugger, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, Florian Sylvestre, Julien Stephan, linux-arm-kernel, AngeloGioacchino Del Regno From: Florian Sylvestre <fsylvestre@baylibre.com> This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in some Mediatek soc, such as the mt8365 Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ MAINTAINERS | 6 ++ 2 files changed, 73 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml new file mode 100644 index 000000000000..a1bd96a98051 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (c) 2023 MediaTek, BayLibre +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mediatek Sensor Interface MIPI CSI CD-PHY + +maintainers: + - Julien Stephan <jstephan@baylibre.com> + - Andy Hsieh <andy.hsieh@mediatek.com> + +description: + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 + receivers. The number of PHYs depends on the SoC model. + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only + capable. + +properties: + compatible: + enum: + - mediatek,mt8365-csi-rx + + reg: + maxItems: 1 + + '#phy-cells': + const: 0 + + mediatek,phy-type: + description: + Specify the phy type. Supported phy are D-PHY only or CD-PHY capable phys. + See include/dt-bindings/phy/phy.h for constants. + enum: [10, 13] + $ref: /schemas/types.yaml#/definitions/uint32 + +required: + - compatible + - reg + - mediatek,phy-type + - '#phy-cells' + +additionalProperties: false + +examples: + - | + #include <dt-bindings/phy/phy.h> + soc { + #address-cells = <2>; + #size-cells = <2>; + + csi0_rx: phy@11c10000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c10000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_CDPHY>; + #phy-cells = <0>; + }; + + csi1_rx: phy@11c12000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c12000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_DPHY>; + #phy-cells = <0>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index b81e9fcc66cb..5da594fbb761 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13184,6 +13184,12 @@ F: Documentation/devicetree/bindings/media/mediatek-vpu.txt F: drivers/media/platform/mediatek/vcodec/ F: drivers/media/platform/mediatek/vpu/ +MEDIATEK MIPI-CSI CDPHY DRIVER +M: Julien Stephan <jstephan@baylibre.com> +M: Andy Hsieh <andy.hsieh@mediatek.com> +S: Supported +F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml + MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> S: Maintained -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Florian Sylvestre, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Florian Sylvestre <fsylvestre@baylibre.com> This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in some Mediatek soc, such as the mt8365 Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ MAINTAINERS | 6 ++ 2 files changed, 73 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml new file mode 100644 index 000000000000..a1bd96a98051 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (c) 2023 MediaTek, BayLibre +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mediatek Sensor Interface MIPI CSI CD-PHY + +maintainers: + - Julien Stephan <jstephan@baylibre.com> + - Andy Hsieh <andy.hsieh@mediatek.com> + +description: + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 + receivers. The number of PHYs depends on the SoC model. + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only + capable. + +properties: + compatible: + enum: + - mediatek,mt8365-csi-rx + + reg: + maxItems: 1 + + '#phy-cells': + const: 0 + + mediatek,phy-type: + description: + Specify the phy type. Supported phy are D-PHY only or CD-PHY capable phys. + See include/dt-bindings/phy/phy.h for constants. + enum: [10, 13] + $ref: /schemas/types.yaml#/definitions/uint32 + +required: + - compatible + - reg + - mediatek,phy-type + - '#phy-cells' + +additionalProperties: false + +examples: + - | + #include <dt-bindings/phy/phy.h> + soc { + #address-cells = <2>; + #size-cells = <2>; + + csi0_rx: phy@11c10000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c10000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_CDPHY>; + #phy-cells = <0>; + }; + + csi1_rx: phy@11c12000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c12000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_DPHY>; + #phy-cells = <0>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index b81e9fcc66cb..5da594fbb761 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13184,6 +13184,12 @@ F: Documentation/devicetree/bindings/media/mediatek-vpu.txt F: drivers/media/platform/mediatek/vcodec/ F: drivers/media/platform/mediatek/vpu/ +MEDIATEK MIPI-CSI CDPHY DRIVER +M: Julien Stephan <jstephan@baylibre.com> +M: Andy Hsieh <andy.hsieh@mediatek.com> +S: Supported +F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml + MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> S: Maintained -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Florian Sylvestre, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Florian Sylvestre <fsylvestre@baylibre.com> This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in some Mediatek soc, such as the mt8365 Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ MAINTAINERS | 6 ++ 2 files changed, 73 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml new file mode 100644 index 000000000000..a1bd96a98051 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (c) 2023 MediaTek, BayLibre +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mediatek Sensor Interface MIPI CSI CD-PHY + +maintainers: + - Julien Stephan <jstephan@baylibre.com> + - Andy Hsieh <andy.hsieh@mediatek.com> + +description: + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 + receivers. The number of PHYs depends on the SoC model. + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only + capable. + +properties: + compatible: + enum: + - mediatek,mt8365-csi-rx + + reg: + maxItems: 1 + + '#phy-cells': + const: 0 + + mediatek,phy-type: + description: + Specify the phy type. Supported phy are D-PHY only or CD-PHY capable phys. + See include/dt-bindings/phy/phy.h for constants. + enum: [10, 13] + $ref: /schemas/types.yaml#/definitions/uint32 + +required: + - compatible + - reg + - mediatek,phy-type + - '#phy-cells' + +additionalProperties: false + +examples: + - | + #include <dt-bindings/phy/phy.h> + soc { + #address-cells = <2>; + #size-cells = <2>; + + csi0_rx: phy@11c10000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c10000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_CDPHY>; + #phy-cells = <0>; + }; + + csi1_rx: phy@11c12000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c12000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_DPHY>; + #phy-cells = <0>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index b81e9fcc66cb..5da594fbb761 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13184,6 +13184,12 @@ F: Documentation/devicetree/bindings/media/mediatek-vpu.txt F: drivers/media/platform/mediatek/vcodec/ F: drivers/media/platform/mediatek/vpu/ +MEDIATEK MIPI-CSI CDPHY DRIVER +M: Julien Stephan <jstephan@baylibre.com> +M: Andy Hsieh <andy.hsieh@mediatek.com> +S: Supported +F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml + MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> S: Maintained -- 2.40.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Florian Sylvestre, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Florian Sylvestre <fsylvestre@baylibre.com> This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in some Mediatek soc, such as the mt8365 Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ MAINTAINERS | 6 ++ 2 files changed, 73 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml new file mode 100644 index 000000000000..a1bd96a98051 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (c) 2023 MediaTek, BayLibre +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Mediatek Sensor Interface MIPI CSI CD-PHY + +maintainers: + - Julien Stephan <jstephan@baylibre.com> + - Andy Hsieh <andy.hsieh@mediatek.com> + +description: + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 + receivers. The number of PHYs depends on the SoC model. + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only + capable. + +properties: + compatible: + enum: + - mediatek,mt8365-csi-rx + + reg: + maxItems: 1 + + '#phy-cells': + const: 0 + + mediatek,phy-type: + description: + Specify the phy type. Supported phy are D-PHY only or CD-PHY capable phys. + See include/dt-bindings/phy/phy.h for constants. + enum: [10, 13] + $ref: /schemas/types.yaml#/definitions/uint32 + +required: + - compatible + - reg + - mediatek,phy-type + - '#phy-cells' + +additionalProperties: false + +examples: + - | + #include <dt-bindings/phy/phy.h> + soc { + #address-cells = <2>; + #size-cells = <2>; + + csi0_rx: phy@11c10000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c10000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_CDPHY>; + #phy-cells = <0>; + }; + + csi1_rx: phy@11c12000 { + compatible = "mediatek,mt8365-csi-rx"; + reg = <0 0x11c12000 0 0x2000>; + mediatek,phy-type = <PHY_TYPE_DPHY>; + #phy-cells = <0>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index b81e9fcc66cb..5da594fbb761 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13184,6 +13184,12 @@ F: Documentation/devicetree/bindings/media/mediatek-vpu.txt F: drivers/media/platform/mediatek/vcodec/ F: drivers/media/platform/mediatek/vpu/ +MEDIATEK MIPI-CSI CDPHY DRIVER +M: Julien Stephan <jstephan@baylibre.com> +M: Andy Hsieh <andy.hsieh@mediatek.com> +S: Supported +F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml + MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> S: Maintained -- 2.40.1 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 2023-05-24 8:30 ` Julien Stephan (?) (?) @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno -1 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Il 24/05/23 10:30, Julien Stephan ha scritto: > From: Florian Sylvestre <fsylvestre@baylibre.com> > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > some Mediatek soc, such as the mt8365 > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > MAINTAINERS | 6 ++ > 2 files changed, 73 insertions(+) > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > new file mode 100644 > index 000000000000..a1bd96a98051 > --- /dev/null > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > @@ -0,0 +1,67 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (c) 2023 MediaTek, BayLibre > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > + > +maintainers: > + - Julien Stephan <jstephan@baylibre.com> > + - Andy Hsieh <andy.hsieh@mediatek.com> > + > +description: > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > + receivers. The number of PHYs depends on the SoC model. > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > + capable. > + > +properties: > + compatible: > + enum: > + - mediatek,mt8365-csi-rx > + > + reg: > + maxItems: 1 > + > + '#phy-cells': > + const: 0 > + > + mediatek,phy-type: Instead of declaring a phy-type here like this, can't we instead declare that in the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are already doing? device { ... phys = <&csi0_rx PHY_TYPE_CDPHY>; ... } Regards, Angelo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno 0 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, Florian Sylvestre, linux-arm-kernel, Matthias Brugger Il 24/05/23 10:30, Julien Stephan ha scritto: > From: Florian Sylvestre <fsylvestre@baylibre.com> > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > some Mediatek soc, such as the mt8365 > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > MAINTAINERS | 6 ++ > 2 files changed, 73 insertions(+) > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > new file mode 100644 > index 000000000000..a1bd96a98051 > --- /dev/null > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > @@ -0,0 +1,67 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (c) 2023 MediaTek, BayLibre > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > + > +maintainers: > + - Julien Stephan <jstephan@baylibre.com> > + - Andy Hsieh <andy.hsieh@mediatek.com> > + > +description: > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > + receivers. The number of PHYs depends on the SoC model. > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > + capable. > + > +properties: > + compatible: > + enum: > + - mediatek,mt8365-csi-rx > + > + reg: > + maxItems: 1 > + > + '#phy-cells': > + const: 0 > + > + mediatek,phy-type: Instead of declaring a phy-type here like this, can't we instead declare that in the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are already doing? device { ... phys = <&csi0_rx PHY_TYPE_CDPHY>; ... } Regards, Angelo ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno 0 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Il 24/05/23 10:30, Julien Stephan ha scritto: > From: Florian Sylvestre <fsylvestre@baylibre.com> > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > some Mediatek soc, such as the mt8365 > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > MAINTAINERS | 6 ++ > 2 files changed, 73 insertions(+) > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > new file mode 100644 > index 000000000000..a1bd96a98051 > --- /dev/null > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > @@ -0,0 +1,67 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (c) 2023 MediaTek, BayLibre > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > + > +maintainers: > + - Julien Stephan <jstephan@baylibre.com> > + - Andy Hsieh <andy.hsieh@mediatek.com> > + > +description: > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > + receivers. The number of PHYs depends on the SoC model. > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > + capable. > + > +properties: > + compatible: > + enum: > + - mediatek,mt8365-csi-rx > + > + reg: > + maxItems: 1 > + > + '#phy-cells': > + const: 0 > + > + mediatek,phy-type: Instead of declaring a phy-type here like this, can't we instead declare that in the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are already doing? device { ... phys = <&csi0_rx PHY_TYPE_CDPHY>; ... } Regards, Angelo _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 9:45 ` AngeloGioacchino Del Regno 0 siblings, 0 replies; 40+ messages in thread From: AngeloGioacchino Del Regno @ 2023-05-24 9:45 UTC (permalink / raw) To: Julien Stephan Cc: mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul Il 24/05/23 10:30, Julien Stephan ha scritto: > From: Florian Sylvestre <fsylvestre@baylibre.com> > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > some Mediatek soc, such as the mt8365 > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > --- > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > MAINTAINERS | 6 ++ > 2 files changed, 73 insertions(+) > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > new file mode 100644 > index 000000000000..a1bd96a98051 > --- /dev/null > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > @@ -0,0 +1,67 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (c) 2023 MediaTek, BayLibre > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > + > +maintainers: > + - Julien Stephan <jstephan@baylibre.com> > + - Andy Hsieh <andy.hsieh@mediatek.com> > + > +description: > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > + receivers. The number of PHYs depends on the SoC model. > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > + capable. > + > +properties: > + compatible: > + enum: > + - mediatek,mt8365-csi-rx > + > + reg: > + maxItems: 1 > + > + '#phy-cells': > + const: 0 > + > + mediatek,phy-type: Instead of declaring a phy-type here like this, can't we instead declare that in the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are already doing? device { ... phys = <&csi0_rx PHY_TYPE_CDPHY>; ... } Regards, Angelo -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 2023-05-24 9:45 ` AngeloGioacchino Del Regno (?) (?) @ 2023-05-24 14:05 ` Julien Stephan -1 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 14:05 UTC (permalink / raw) To: AngeloGioacchino Del Regno Cc: mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > Il 24/05/23 10:30, Julien Stephan ha scritto: > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > some Mediatek soc, such as the mt8365 > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > --- > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > MAINTAINERS | 6 ++ > > 2 files changed, 73 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > new file mode 100644 > > index 000000000000..a1bd96a98051 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > @@ -0,0 +1,67 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +# Copyright (c) 2023 MediaTek, BayLibre > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > + > > +maintainers: > > + - Julien Stephan <jstephan@baylibre.com> > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > + > > +description: > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > + receivers. The number of PHYs depends on the SoC model. > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > + capable. > > + > > +properties: > > + compatible: > > + enum: > > + - mediatek,mt8365-csi-rx > > + > > + reg: > > + maxItems: 1 > > + > > + '#phy-cells': > > + const: 0 > > + > > + mediatek,phy-type: > > Instead of declaring a phy-type here like this, can't we instead declare that in > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > already doing? > > device { > ... > phys = <&csi0_rx PHY_TYPE_CDPHY>; > ... > } > > Regards, > Angelo > > Hi Angelo, This is a hardware property that is not dynamic, so IMHO it doesn't make sense to use phy argument for that. Some driver already use a 'phy-type' property (such as phy-cadence-torrent.yaml). I was thinking of using phy argument on future upgrade when driver will support D-PHY and C-PHY modes so the phy user will be able to choose the mode. Does it makes sense? Best Julien ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 14:05 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 14:05 UTC (permalink / raw) To: AngeloGioacchino Del Regno Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, linux-kernel, dri-devel, linux-phy, Vinod Koul, Rob Herring, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, Florian Sylvestre, linux-arm-kernel, Matthias Brugger On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > Il 24/05/23 10:30, Julien Stephan ha scritto: > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > some Mediatek soc, such as the mt8365 > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > --- > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > MAINTAINERS | 6 ++ > > 2 files changed, 73 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > new file mode 100644 > > index 000000000000..a1bd96a98051 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > @@ -0,0 +1,67 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +# Copyright (c) 2023 MediaTek, BayLibre > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > + > > +maintainers: > > + - Julien Stephan <jstephan@baylibre.com> > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > + > > +description: > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > + receivers. The number of PHYs depends on the SoC model. > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > + capable. > > + > > +properties: > > + compatible: > > + enum: > > + - mediatek,mt8365-csi-rx > > + > > + reg: > > + maxItems: 1 > > + > > + '#phy-cells': > > + const: 0 > > + > > + mediatek,phy-type: > > Instead of declaring a phy-type here like this, can't we instead declare that in > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > already doing? > > device { > ... > phys = <&csi0_rx PHY_TYPE_CDPHY>; > ... > } > > Regards, > Angelo > > Hi Angelo, This is a hardware property that is not dynamic, so IMHO it doesn't make sense to use phy argument for that. Some driver already use a 'phy-type' property (such as phy-cadence-torrent.yaml). I was thinking of using phy argument on future upgrade when driver will support D-PHY and C-PHY modes so the phy user will be able to choose the mode. Does it makes sense? Best Julien ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 14:05 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 14:05 UTC (permalink / raw) To: AngeloGioacchino Del Regno Cc: mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > Il 24/05/23 10:30, Julien Stephan ha scritto: > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > some Mediatek soc, such as the mt8365 > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > --- > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > MAINTAINERS | 6 ++ > > 2 files changed, 73 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > new file mode 100644 > > index 000000000000..a1bd96a98051 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > @@ -0,0 +1,67 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +# Copyright (c) 2023 MediaTek, BayLibre > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > + > > +maintainers: > > + - Julien Stephan <jstephan@baylibre.com> > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > + > > +description: > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > + receivers. The number of PHYs depends on the SoC model. > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > + capable. > > + > > +properties: > > + compatible: > > + enum: > > + - mediatek,mt8365-csi-rx > > + > > + reg: > > + maxItems: 1 > > + > > + '#phy-cells': > > + const: 0 > > + > > + mediatek,phy-type: > > Instead of declaring a phy-type here like this, can't we instead declare that in > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > already doing? > > device { > ... > phys = <&csi0_rx PHY_TYPE_CDPHY>; > ... > } > > Regards, > Angelo > > Hi Angelo, This is a hardware property that is not dynamic, so IMHO it doesn't make sense to use phy argument for that. Some driver already use a 'phy-type' property (such as phy-cadence-torrent.yaml). I was thinking of using phy argument on future upgrade when driver will support D-PHY and C-PHY modes so the phy user will be able to choose the mode. Does it makes sense? Best Julien _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-05-24 14:05 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 14:05 UTC (permalink / raw) To: AngeloGioacchino Del Regno Cc: mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > Il 24/05/23 10:30, Julien Stephan ha scritto: > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > some Mediatek soc, such as the mt8365 > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > --- > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > MAINTAINERS | 6 ++ > > 2 files changed, 73 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > new file mode 100644 > > index 000000000000..a1bd96a98051 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > @@ -0,0 +1,67 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +# Copyright (c) 2023 MediaTek, BayLibre > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > + > > +maintainers: > > + - Julien Stephan <jstephan@baylibre.com> > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > + > > +description: > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > + receivers. The number of PHYs depends on the SoC model. > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > + capable. > > + > > +properties: > > + compatible: > > + enum: > > + - mediatek,mt8365-csi-rx > > + > > + reg: > > + maxItems: 1 > > + > > + '#phy-cells': > > + const: 0 > > + > > + mediatek,phy-type: > > Instead of declaring a phy-type here like this, can't we instead declare that in > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > already doing? > > device { > ... > phys = <&csi0_rx PHY_TYPE_CDPHY>; > ... > } > > Regards, > Angelo > > Hi Angelo, This is a hardware property that is not dynamic, so IMHO it doesn't make sense to use phy argument for that. Some driver already use a 'phy-type' property (such as phy-cadence-torrent.yaml). I was thinking of using phy argument on future upgrade when driver will support D-PHY and C-PHY modes so the phy user will be able to choose the mode. Does it makes sense? Best Julien -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 2023-05-24 14:05 ` Julien Stephan (?) (?) @ 2023-06-08 20:05 ` Rob Herring -1 siblings, 0 replies; 40+ messages in thread From: Rob Herring @ 2023-06-08 20:05 UTC (permalink / raw) To: Julien Stephan Cc: AngeloGioacchino Del Regno, mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Vinod Koul On Wed, May 24, 2023 at 04:05:03PM +0200, Julien Stephan wrote: > On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > > Il 24/05/23 10:30, Julien Stephan ha scritto: > > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > > some Mediatek soc, such as the mt8365 > > > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > > --- > > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > > MAINTAINERS | 6 ++ > > > 2 files changed, 73 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > new file mode 100644 > > > index 000000000000..a1bd96a98051 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > @@ -0,0 +1,67 @@ > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > +# Copyright (c) 2023 MediaTek, BayLibre > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > > + > > > +maintainers: > > > + - Julien Stephan <jstephan@baylibre.com> > > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > > + > > > +description: > > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > > + receivers. The number of PHYs depends on the SoC model. > > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > > + capable. > > > + > > > +properties: > > > + compatible: > > > + enum: > > > + - mediatek,mt8365-csi-rx > > > + > > > + reg: > > > + maxItems: 1 > > > + > > > + '#phy-cells': > > > + const: 0 > > > + > > > + mediatek,phy-type: > > > > Instead of declaring a phy-type here like this, can't we instead declare that in > > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > > already doing? > > > > device { > > ... > > phys = <&csi0_rx PHY_TYPE_CDPHY>; > > ... > > } > > > > Regards, > > Angelo > > > > > > Hi Angelo, > > This is a hardware property that is not dynamic, so IMHO it doesn't make sense > to use phy argument for that. Why? Interrupt numbers are fixed hardware properties which go in arg cells. > Some driver already use a 'phy-type' > property (such as phy-cadence-torrent.yaml). > > I was thinking of using phy argument on future upgrade when driver will > support D-PHY and C-PHY modes so the phy user will be able to choose the > mode. Once you design the binding, you don't get to change it. Rob -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-06-08 20:05 ` Rob Herring 0 siblings, 0 replies; 40+ messages in thread From: Rob Herring @ 2023-06-08 20:05 UTC (permalink / raw) To: Julien Stephan Cc: Kishon Vijay Abraham I, Chun-Kuang Hu, Conor Dooley, devicetree, khilman, mkorpershoek, Matthias Brugger, linux-kernel, dri-devel, linux-phy, Vinod Koul, linux-mediatek, Andy Hsieh, Krzysztof Kozlowski, Chunfeng Yun, Florian Sylvestre, linux-arm-kernel, AngeloGioacchino Del Regno On Wed, May 24, 2023 at 04:05:03PM +0200, Julien Stephan wrote: > On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > > Il 24/05/23 10:30, Julien Stephan ha scritto: > > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > > some Mediatek soc, such as the mt8365 > > > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > > --- > > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > > MAINTAINERS | 6 ++ > > > 2 files changed, 73 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > new file mode 100644 > > > index 000000000000..a1bd96a98051 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > @@ -0,0 +1,67 @@ > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > +# Copyright (c) 2023 MediaTek, BayLibre > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > > + > > > +maintainers: > > > + - Julien Stephan <jstephan@baylibre.com> > > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > > + > > > +description: > > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > > + receivers. The number of PHYs depends on the SoC model. > > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > > + capable. > > > + > > > +properties: > > > + compatible: > > > + enum: > > > + - mediatek,mt8365-csi-rx > > > + > > > + reg: > > > + maxItems: 1 > > > + > > > + '#phy-cells': > > > + const: 0 > > > + > > > + mediatek,phy-type: > > > > Instead of declaring a phy-type here like this, can't we instead declare that in > > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > > already doing? > > > > device { > > ... > > phys = <&csi0_rx PHY_TYPE_CDPHY>; > > ... > > } > > > > Regards, > > Angelo > > > > > > Hi Angelo, > > This is a hardware property that is not dynamic, so IMHO it doesn't make sense > to use phy argument for that. Why? Interrupt numbers are fixed hardware properties which go in arg cells. > Some driver already use a 'phy-type' > property (such as phy-cadence-torrent.yaml). > > I was thinking of using phy argument on future upgrade when driver will > support D-PHY and C-PHY modes so the phy user will be able to choose the > mode. Once you design the binding, you don't get to change it. Rob ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-06-08 20:05 ` Rob Herring 0 siblings, 0 replies; 40+ messages in thread From: Rob Herring @ 2023-06-08 20:05 UTC (permalink / raw) To: Julien Stephan Cc: AngeloGioacchino Del Regno, mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Vinod Koul On Wed, May 24, 2023 at 04:05:03PM +0200, Julien Stephan wrote: > On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > > Il 24/05/23 10:30, Julien Stephan ha scritto: > > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > > some Mediatek soc, such as the mt8365 > > > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > > --- > > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > > MAINTAINERS | 6 ++ > > > 2 files changed, 73 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > new file mode 100644 > > > index 000000000000..a1bd96a98051 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > @@ -0,0 +1,67 @@ > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > +# Copyright (c) 2023 MediaTek, BayLibre > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > > + > > > +maintainers: > > > + - Julien Stephan <jstephan@baylibre.com> > > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > > + > > > +description: > > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > > + receivers. The number of PHYs depends on the SoC model. > > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > > + capable. > > > + > > > +properties: > > > + compatible: > > > + enum: > > > + - mediatek,mt8365-csi-rx > > > + > > > + reg: > > > + maxItems: 1 > > > + > > > + '#phy-cells': > > > + const: 0 > > > + > > > + mediatek,phy-type: > > > > Instead of declaring a phy-type here like this, can't we instead declare that in > > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > > already doing? > > > > device { > > ... > > phys = <&csi0_rx PHY_TYPE_CDPHY>; > > ... > > } > > > > Regards, > > Angelo > > > > > > Hi Angelo, > > This is a hardware property that is not dynamic, so IMHO it doesn't make sense > to use phy argument for that. Why? Interrupt numbers are fixed hardware properties which go in arg cells. > Some driver already use a 'phy-type' > property (such as phy-cadence-torrent.yaml). > > I was thinking of using phy argument on future upgrade when driver will > support D-PHY and C-PHY modes so the phy user will be able to choose the > mode. Once you design the binding, you don't get to change it. Rob ^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 @ 2023-06-08 20:05 ` Rob Herring 0 siblings, 0 replies; 40+ messages in thread From: Rob Herring @ 2023-06-08 20:05 UTC (permalink / raw) To: Julien Stephan Cc: AngeloGioacchino Del Regno, mkorpershoek, khilman, Florian Sylvestre, Andy Hsieh, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Vinod Koul On Wed, May 24, 2023 at 04:05:03PM +0200, Julien Stephan wrote: > On Wed, May 24, 2023 at 11:45:30AM +0200, AngeloGioacchino Del Regno wrote: > > Il 24/05/23 10:30, Julien Stephan ha scritto: > > > From: Florian Sylvestre <fsylvestre@baylibre.com> > > > > > > This adds the bindings, for the MIPI CD-PHY module v0.5 embedded in > > > some Mediatek soc, such as the mt8365 > > > > > > Signed-off-by: Florian Sylvestre <fsylvestre@baylibre.com> > > > Signed-off-by: Julien Stephan <jstephan@baylibre.com> > > > --- > > > .../bindings/phy/mediatek,mt8365-csi-rx.yaml | 67 +++++++++++++++++++ > > > MAINTAINERS | 6 ++ > > > 2 files changed, 73 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > > > > diff --git a/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > new file mode 100644 > > > index 000000000000..a1bd96a98051 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml > > > @@ -0,0 +1,67 @@ > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > > +# Copyright (c) 2023 MediaTek, BayLibre > > > +%YAML 1.2 > > > +--- > > > +$id: http://devicetree.org/schemas/phy/mediatek,mt8365-csi-rx.yaml# > > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > > + > > > +title: Mediatek Sensor Interface MIPI CSI CD-PHY > > > + > > > +maintainers: > > > + - Julien Stephan <jstephan@baylibre.com> > > > + - Andy Hsieh <andy.hsieh@mediatek.com> > > > + > > > +description: > > > + The SENINF CD-PHY is a set of CD-PHY connected to the SENINF CSI-2 > > > + receivers. The number of PHYs depends on the SoC model. > > > + Depending on the SoC model, each PHYs can be either CD-PHY or D-PHY only > > > + capable. > > > + > > > +properties: > > > + compatible: > > > + enum: > > > + - mediatek,mt8365-csi-rx > > > + > > > + reg: > > > + maxItems: 1 > > > + > > > + '#phy-cells': > > > + const: 0 > > > + > > > + mediatek,phy-type: > > > > Instead of declaring a phy-type here like this, can't we instead declare that in > > the phy cells, like we're doing with MTK TPHY and like other non-MediaTek PHYs are > > already doing? > > > > device { > > ... > > phys = <&csi0_rx PHY_TYPE_CDPHY>; > > ... > > } > > > > Regards, > > Angelo > > > > > > Hi Angelo, > > This is a hardware property that is not dynamic, so IMHO it doesn't make sense > to use phy argument for that. Why? Interrupt numbers are fixed hardware properties which go in arg cells. > Some driver already use a 'phy-type' > property (such as phy-cadence-torrent.yaml). > > I was thinking of using phy argument on future upgrade when driver will > support D-PHY and C-PHY modes so the phy user will be able to choose the > mode. Once you design the binding, you don't get to change it. Rob _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 40+ messages in thread
* [PATCH v3 3/3] phy: mtk-mipi-csi: add driver for CSI phy 2023-05-24 8:30 ` Julien Stephan ` (2 preceding siblings ...) (?) @ 2023-05-24 8:30 ` Julien Stephan -1 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Phi-bang Nguyen, Louis Kuo, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Phi-bang Nguyen <pnguyen@baylibre.com> This is a new driver that supports the MIPI CSI CD-PHY version 0.5 The number of PHYs depend on the SoC. Each PHY can support D-PHY only or CD-PHY configuration. The driver supports only D-PHY mode, so CD-PHY compatible PHY are configured in D-PHY mode. Signed-off-by: Louis Kuo <louis.kuo@mediatek.com> Signed-off-by: Phi-bang Nguyen <pnguyen@baylibre.com> [Julien Stephan: refactor code] [Julien Stephan: simplify driver model: one instance per phy vs one instance for all phys] Co-developed-by: Julien Stephan <jstephan@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- MAINTAINERS | 1 + drivers/phy/mediatek/Kconfig | 12 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 62 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 278 ++++++++++++++++++ 5 files changed, 355 insertions(+) create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c diff --git a/MAINTAINERS b/MAINTAINERS index 5da594fbb761..e505023ffda1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13189,6 +13189,7 @@ M: Julien Stephan <jstephan@baylibre.com> M: Andy Hsieh <andy.hsieh@mediatek.com> S: Supported F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml +F: drivers/phy/mediatek/phy-mtk-mipi-csi-0-5* MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> diff --git a/drivers/phy/mediatek/Kconfig b/drivers/phy/mediatek/Kconfig index 3125ecb5d119..7088382ebc9e 100644 --- a/drivers/phy/mediatek/Kconfig +++ b/drivers/phy/mediatek/Kconfig @@ -74,3 +74,15 @@ config PHY_MTK_DP select GENERIC_PHY help Support DisplayPort PHY for MediaTek SoCs. + +config PHY_MTK_MIPI_CSI_0_5 + tristate "MediaTek MIPI CSI CD-PHY v0.5 Driver" + depends on ARCH_MEDIATEK || COMPILE_TEST + depends on OF + select GENERIC_PHY + help + Enable this to support the MIPI CSI CD-PHY receiver version 0.5. + The driver supports multiple CSI cdphy ports simultaneously. + + To compile this driver as a module, choose M here: the + module will be called phy-mtk-mipi-csi-0-5. diff --git a/drivers/phy/mediatek/Makefile b/drivers/phy/mediatek/Makefile index c9a50395533e..63f2fa3ec7e5 100644 --- a/drivers/phy/mediatek/Makefile +++ b/drivers/phy/mediatek/Makefile @@ -19,3 +19,5 @@ phy-mtk-mipi-dsi-drv-y := phy-mtk-mipi-dsi.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8173.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8183.o obj-$(CONFIG_PHY_MTK_MIPI_DSI) += phy-mtk-mipi-dsi-drv.o + +obj-$(CONFIG_PHY_MTK_MIPI_CSI_0_5) += phy-mtk-mipi-csi-0-5.o diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h new file mode 100644 index 000000000000..97b4c27a1699 --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#ifndef __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ +#define __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ + +/* + * CSI1 and CSI2 are identical, and similar to CSI0. All CSIX macros are + * applicable to the three PHYs. Where differences exist, they are denoted by + * macro names using CSI0 and CSI1, the latter being applicable to CSI1 and + * CSI2 alike. + */ + +#define MIPI_RX_ANA00_CSIXA 0x0000 +#define RG_CSI0A_CPHY_EN BIT(0) +#define RG_CSIXA_EQ_PROTECT_EN BIT(1) +#define RG_CSIXA_BG_LPF_EN BIT(2) +#define RG_CSIXA_BG_CORE_EN BIT(3) +#define RG_CSIXA_DPHY_L0_CKMODE_EN BIT(5) +#define RG_CSIXA_DPHY_L0_CKSEL BIT(6) +#define RG_CSIXA_DPHY_L1_CKMODE_EN BIT(8) +#define RG_CSIXA_DPHY_L1_CKSEL BIT(9) +#define RG_CSIXA_DPHY_L2_CKMODE_EN BIT(11) +#define RG_CSIXA_DPHY_L2_CKSEL BIT(12) + +#define MIPI_RX_ANA18_CSIXA 0x0018 +#define RG_CSI0A_L0_T0AB_EQ_IS GENMASK(5, 4) +#define RG_CSI0A_L0_T0AB_EQ_BW GENMASK(7, 6) +#define RG_CSI0A_L1_T1AB_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L1_T1AB_EQ_BW GENMASK(23, 22) +#define RG_CSI0A_L2_T1BC_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L2_T1BC_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L0_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L0_EQ_BW GENMASK(7, 6) +#define RG_CSI1A_L1_EQ_IS GENMASK(21, 20) +#define RG_CSI1A_L1_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L2_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L2_EQ_BW GENMASK(7, 6) + +#define MIPI_RX_ANA1C_CSIXA 0x001c +#define MIPI_RX_ANA20_CSI0A 0x0020 + +#define MIPI_RX_ANA24_CSIXA 0x0024 +#define RG_CSIXA_RESERVE GENMASK(31, 24) + +#define MIPI_RX_ANA40_CSIXA 0x0040 +#define RG_CSIXA_CPHY_FMCK_SEL GENMASK(1, 0) +#define RG_CSIXA_ASYNC_OPTION GENMASK(7, 4) +#define RG_CSIXA_CPHY_SPARE GENMASK(31, 16) + +#define MIPI_RX_WRAPPER80_CSIXA 0x0080 +#define CSR_CSI_RST_MODE GENMASK(17, 16) + +#define MIPI_RX_ANAA8_CSIXA 0x00a8 +#define RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT BIT(0) +#define RG_CSIXA_DPHY_L1_BYTECK_INVERT BIT(1) +#define RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT BIT(2) + +#endif diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c new file mode 100644 index 000000000000..6eafd7c0514c --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c @@ -0,0 +1,278 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MediaTek MIPI CSI v0.5 driver + * + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#include <dt-bindings/phy/phy.h> +#include <linux/bitfield.h> +#include <linux/delay.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/phy/phy.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include "phy-mtk-io.h" +#include "phy-mtk-mipi-csi-0-5-rx-reg.h" + +#define CSIXB_OFFSET 0x1000 + +struct mtk_mipi_dphy; + +struct mtk_mipi_dphy_port { + struct device *dev; + void __iomem *base; + struct phy *phy; + u32 type; +}; + +static void mtk_phy_csi_cdphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); +} + +static void mtk_phy_csi_dphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); +} + +static int mtk_mipi_phy_power_on(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* + * The driver currently supports DPHY and CD-PHY phys, + * but the only mode supported is DPHY, + * so CD-PHY capable phys must be configured in DPHY mode + */ + if (port->type == PHY_TYPE_CDPHY) { + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + } + + /* + * Lane configuration: + * + * Only 4 data + 1 clock is supported for now with the following mapping: + * + * CSIXA_LNR0 --> D2 + * CSIXA_LNR1 --> D0 + * CSIXA_LNR2 --> C + * CSIXB_LNR0 --> D1 + * CSIXB_LNR1 --> D3 + */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + /* Byte clock invert */ + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + /* Start ANA EQ tuning */ + if (port->type == PHY_TYPE_CDPHY) + mtk_phy_csi_cdphy_ana_eq_tune(base); + else + mtk_phy_csi_dphy_ana_eq_tune(base); + + /* End ANA EQ tuning */ + mtk_phy_set_bits(base + MIPI_RX_ANA40_CSIXA, 0x90); + + mtk_phy_update_field(base + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + /* ANA power on */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + usleep_range(20, 40); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + + return 0; +} + +static int mtk_mipi_phy_power_off(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* Disable MIPI BG. */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + return 0; +} + +static const struct phy_ops mtk_dphy_ops = { + .power_on = mtk_mipi_phy_power_on, + .power_off = mtk_mipi_phy_power_off, + .owner = THIS_MODULE, +}; + +static int mtk_mipi_dphy_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct phy_provider *phy_provider; + struct mtk_mipi_dphy_port *port; + struct phy *phy; + int ret; + + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); + if (!port) + return -ENOMEM; + + dev_set_drvdata(dev, port); + + port->dev = dev; + + port->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(port->base)) + return PTR_ERR(port->base); + + ret = of_property_read_u32(dev->of_node, "mediatek,phy-type", &port->type); + if (ret) { + dev_err(dev, "Failed to read mediatek,phy-type\n"); + return ret; + } + + phy = devm_phy_create(dev, NULL, &mtk_dphy_ops); + if (IS_ERR(phy)) { + dev_err(dev, "Failed to create PHY: %ld\n", PTR_ERR(phy)); + return PTR_ERR(phy); + } + + port->phy = phy; + phy_set_drvdata(phy, port); + + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) { + dev_err(dev, "Failed to register PHY provider: %ld\n", + PTR_ERR(phy_provider)); + return PTR_ERR(phy_provider); + } + + return 0; +} + +static const struct of_device_id mtk_mipi_dphy_of_match[] = { + { .compatible = "mediatek,mt8365-csi-rx" }, + { /* sentinel */}, +}; +MODULE_DEVICE_TABLE(of, mtk_mipi_dphy_of_match); + +static struct platform_driver mipi_dphy_pdrv = { + .probe = mtk_mipi_dphy_probe, + .driver = { + .name = "mtk-mipi-csi-0-5", + .of_match_table = mtk_mipi_dphy_of_match, + }, +}; +module_platform_driver(mipi_dphy_pdrv); + +MODULE_DESCRIPTION("MediaTek MIPI CSI CD-PHY v0.5 Driver"); +MODULE_AUTHOR("Louis Kuo <louis.kuo@mediatek.com>"); +MODULE_LICENSE("GPL"); -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 3/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: devicetree, dri-devel, Louis Kuo, Andy Hsieh, Krzysztof Kozlowski, linux-phy, Kishon Vijay Abraham I, khilman, Chunfeng Yun, Phi-bang Nguyen, Chun-Kuang Hu, Conor Dooley, Rob Herring, linux-mediatek, Matthias Brugger, Julien Stephan, linux-arm-kernel, AngeloGioacchino Del Regno, mkorpershoek, linux-kernel, Vinod Koul From: Phi-bang Nguyen <pnguyen@baylibre.com> This is a new driver that supports the MIPI CSI CD-PHY version 0.5 The number of PHYs depend on the SoC. Each PHY can support D-PHY only or CD-PHY configuration. The driver supports only D-PHY mode, so CD-PHY compatible PHY are configured in D-PHY mode. Signed-off-by: Louis Kuo <louis.kuo@mediatek.com> Signed-off-by: Phi-bang Nguyen <pnguyen@baylibre.com> [Julien Stephan: refactor code] [Julien Stephan: simplify driver model: one instance per phy vs one instance for all phys] Co-developed-by: Julien Stephan <jstephan@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- MAINTAINERS | 1 + drivers/phy/mediatek/Kconfig | 12 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 62 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 278 ++++++++++++++++++ 5 files changed, 355 insertions(+) create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c diff --git a/MAINTAINERS b/MAINTAINERS index 5da594fbb761..e505023ffda1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13189,6 +13189,7 @@ M: Julien Stephan <jstephan@baylibre.com> M: Andy Hsieh <andy.hsieh@mediatek.com> S: Supported F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml +F: drivers/phy/mediatek/phy-mtk-mipi-csi-0-5* MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> diff --git a/drivers/phy/mediatek/Kconfig b/drivers/phy/mediatek/Kconfig index 3125ecb5d119..7088382ebc9e 100644 --- a/drivers/phy/mediatek/Kconfig +++ b/drivers/phy/mediatek/Kconfig @@ -74,3 +74,15 @@ config PHY_MTK_DP select GENERIC_PHY help Support DisplayPort PHY for MediaTek SoCs. + +config PHY_MTK_MIPI_CSI_0_5 + tristate "MediaTek MIPI CSI CD-PHY v0.5 Driver" + depends on ARCH_MEDIATEK || COMPILE_TEST + depends on OF + select GENERIC_PHY + help + Enable this to support the MIPI CSI CD-PHY receiver version 0.5. + The driver supports multiple CSI cdphy ports simultaneously. + + To compile this driver as a module, choose M here: the + module will be called phy-mtk-mipi-csi-0-5. diff --git a/drivers/phy/mediatek/Makefile b/drivers/phy/mediatek/Makefile index c9a50395533e..63f2fa3ec7e5 100644 --- a/drivers/phy/mediatek/Makefile +++ b/drivers/phy/mediatek/Makefile @@ -19,3 +19,5 @@ phy-mtk-mipi-dsi-drv-y := phy-mtk-mipi-dsi.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8173.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8183.o obj-$(CONFIG_PHY_MTK_MIPI_DSI) += phy-mtk-mipi-dsi-drv.o + +obj-$(CONFIG_PHY_MTK_MIPI_CSI_0_5) += phy-mtk-mipi-csi-0-5.o diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h new file mode 100644 index 000000000000..97b4c27a1699 --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#ifndef __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ +#define __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ + +/* + * CSI1 and CSI2 are identical, and similar to CSI0. All CSIX macros are + * applicable to the three PHYs. Where differences exist, they are denoted by + * macro names using CSI0 and CSI1, the latter being applicable to CSI1 and + * CSI2 alike. + */ + +#define MIPI_RX_ANA00_CSIXA 0x0000 +#define RG_CSI0A_CPHY_EN BIT(0) +#define RG_CSIXA_EQ_PROTECT_EN BIT(1) +#define RG_CSIXA_BG_LPF_EN BIT(2) +#define RG_CSIXA_BG_CORE_EN BIT(3) +#define RG_CSIXA_DPHY_L0_CKMODE_EN BIT(5) +#define RG_CSIXA_DPHY_L0_CKSEL BIT(6) +#define RG_CSIXA_DPHY_L1_CKMODE_EN BIT(8) +#define RG_CSIXA_DPHY_L1_CKSEL BIT(9) +#define RG_CSIXA_DPHY_L2_CKMODE_EN BIT(11) +#define RG_CSIXA_DPHY_L2_CKSEL BIT(12) + +#define MIPI_RX_ANA18_CSIXA 0x0018 +#define RG_CSI0A_L0_T0AB_EQ_IS GENMASK(5, 4) +#define RG_CSI0A_L0_T0AB_EQ_BW GENMASK(7, 6) +#define RG_CSI0A_L1_T1AB_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L1_T1AB_EQ_BW GENMASK(23, 22) +#define RG_CSI0A_L2_T1BC_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L2_T1BC_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L0_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L0_EQ_BW GENMASK(7, 6) +#define RG_CSI1A_L1_EQ_IS GENMASK(21, 20) +#define RG_CSI1A_L1_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L2_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L2_EQ_BW GENMASK(7, 6) + +#define MIPI_RX_ANA1C_CSIXA 0x001c +#define MIPI_RX_ANA20_CSI0A 0x0020 + +#define MIPI_RX_ANA24_CSIXA 0x0024 +#define RG_CSIXA_RESERVE GENMASK(31, 24) + +#define MIPI_RX_ANA40_CSIXA 0x0040 +#define RG_CSIXA_CPHY_FMCK_SEL GENMASK(1, 0) +#define RG_CSIXA_ASYNC_OPTION GENMASK(7, 4) +#define RG_CSIXA_CPHY_SPARE GENMASK(31, 16) + +#define MIPI_RX_WRAPPER80_CSIXA 0x0080 +#define CSR_CSI_RST_MODE GENMASK(17, 16) + +#define MIPI_RX_ANAA8_CSIXA 0x00a8 +#define RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT BIT(0) +#define RG_CSIXA_DPHY_L1_BYTECK_INVERT BIT(1) +#define RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT BIT(2) + +#endif diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c new file mode 100644 index 000000000000..6eafd7c0514c --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c @@ -0,0 +1,278 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MediaTek MIPI CSI v0.5 driver + * + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#include <dt-bindings/phy/phy.h> +#include <linux/bitfield.h> +#include <linux/delay.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/phy/phy.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include "phy-mtk-io.h" +#include "phy-mtk-mipi-csi-0-5-rx-reg.h" + +#define CSIXB_OFFSET 0x1000 + +struct mtk_mipi_dphy; + +struct mtk_mipi_dphy_port { + struct device *dev; + void __iomem *base; + struct phy *phy; + u32 type; +}; + +static void mtk_phy_csi_cdphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); +} + +static void mtk_phy_csi_dphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); +} + +static int mtk_mipi_phy_power_on(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* + * The driver currently supports DPHY and CD-PHY phys, + * but the only mode supported is DPHY, + * so CD-PHY capable phys must be configured in DPHY mode + */ + if (port->type == PHY_TYPE_CDPHY) { + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + } + + /* + * Lane configuration: + * + * Only 4 data + 1 clock is supported for now with the following mapping: + * + * CSIXA_LNR0 --> D2 + * CSIXA_LNR1 --> D0 + * CSIXA_LNR2 --> C + * CSIXB_LNR0 --> D1 + * CSIXB_LNR1 --> D3 + */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + /* Byte clock invert */ + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + /* Start ANA EQ tuning */ + if (port->type == PHY_TYPE_CDPHY) + mtk_phy_csi_cdphy_ana_eq_tune(base); + else + mtk_phy_csi_dphy_ana_eq_tune(base); + + /* End ANA EQ tuning */ + mtk_phy_set_bits(base + MIPI_RX_ANA40_CSIXA, 0x90); + + mtk_phy_update_field(base + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + /* ANA power on */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + usleep_range(20, 40); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + + return 0; +} + +static int mtk_mipi_phy_power_off(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* Disable MIPI BG. */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + return 0; +} + +static const struct phy_ops mtk_dphy_ops = { + .power_on = mtk_mipi_phy_power_on, + .power_off = mtk_mipi_phy_power_off, + .owner = THIS_MODULE, +}; + +static int mtk_mipi_dphy_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct phy_provider *phy_provider; + struct mtk_mipi_dphy_port *port; + struct phy *phy; + int ret; + + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); + if (!port) + return -ENOMEM; + + dev_set_drvdata(dev, port); + + port->dev = dev; + + port->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(port->base)) + return PTR_ERR(port->base); + + ret = of_property_read_u32(dev->of_node, "mediatek,phy-type", &port->type); + if (ret) { + dev_err(dev, "Failed to read mediatek,phy-type\n"); + return ret; + } + + phy = devm_phy_create(dev, NULL, &mtk_dphy_ops); + if (IS_ERR(phy)) { + dev_err(dev, "Failed to create PHY: %ld\n", PTR_ERR(phy)); + return PTR_ERR(phy); + } + + port->phy = phy; + phy_set_drvdata(phy, port); + + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) { + dev_err(dev, "Failed to register PHY provider: %ld\n", + PTR_ERR(phy_provider)); + return PTR_ERR(phy_provider); + } + + return 0; +} + +static const struct of_device_id mtk_mipi_dphy_of_match[] = { + { .compatible = "mediatek,mt8365-csi-rx" }, + { /* sentinel */}, +}; +MODULE_DEVICE_TABLE(of, mtk_mipi_dphy_of_match); + +static struct platform_driver mipi_dphy_pdrv = { + .probe = mtk_mipi_dphy_probe, + .driver = { + .name = "mtk-mipi-csi-0-5", + .of_match_table = mtk_mipi_dphy_of_match, + }, +}; +module_platform_driver(mipi_dphy_pdrv); + +MODULE_DESCRIPTION("MediaTek MIPI CSI CD-PHY v0.5 Driver"); +MODULE_AUTHOR("Louis Kuo <louis.kuo@mediatek.com>"); +MODULE_LICENSE("GPL"); -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 3/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Phi-bang Nguyen, Louis Kuo, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Phi-bang Nguyen <pnguyen@baylibre.com> This is a new driver that supports the MIPI CSI CD-PHY version 0.5 The number of PHYs depend on the SoC. Each PHY can support D-PHY only or CD-PHY configuration. The driver supports only D-PHY mode, so CD-PHY compatible PHY are configured in D-PHY mode. Signed-off-by: Louis Kuo <louis.kuo@mediatek.com> Signed-off-by: Phi-bang Nguyen <pnguyen@baylibre.com> [Julien Stephan: refactor code] [Julien Stephan: simplify driver model: one instance per phy vs one instance for all phys] Co-developed-by: Julien Stephan <jstephan@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- MAINTAINERS | 1 + drivers/phy/mediatek/Kconfig | 12 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 62 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 278 ++++++++++++++++++ 5 files changed, 355 insertions(+) create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c diff --git a/MAINTAINERS b/MAINTAINERS index 5da594fbb761..e505023ffda1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13189,6 +13189,7 @@ M: Julien Stephan <jstephan@baylibre.com> M: Andy Hsieh <andy.hsieh@mediatek.com> S: Supported F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml +F: drivers/phy/mediatek/phy-mtk-mipi-csi-0-5* MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> diff --git a/drivers/phy/mediatek/Kconfig b/drivers/phy/mediatek/Kconfig index 3125ecb5d119..7088382ebc9e 100644 --- a/drivers/phy/mediatek/Kconfig +++ b/drivers/phy/mediatek/Kconfig @@ -74,3 +74,15 @@ config PHY_MTK_DP select GENERIC_PHY help Support DisplayPort PHY for MediaTek SoCs. + +config PHY_MTK_MIPI_CSI_0_5 + tristate "MediaTek MIPI CSI CD-PHY v0.5 Driver" + depends on ARCH_MEDIATEK || COMPILE_TEST + depends on OF + select GENERIC_PHY + help + Enable this to support the MIPI CSI CD-PHY receiver version 0.5. + The driver supports multiple CSI cdphy ports simultaneously. + + To compile this driver as a module, choose M here: the + module will be called phy-mtk-mipi-csi-0-5. diff --git a/drivers/phy/mediatek/Makefile b/drivers/phy/mediatek/Makefile index c9a50395533e..63f2fa3ec7e5 100644 --- a/drivers/phy/mediatek/Makefile +++ b/drivers/phy/mediatek/Makefile @@ -19,3 +19,5 @@ phy-mtk-mipi-dsi-drv-y := phy-mtk-mipi-dsi.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8173.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8183.o obj-$(CONFIG_PHY_MTK_MIPI_DSI) += phy-mtk-mipi-dsi-drv.o + +obj-$(CONFIG_PHY_MTK_MIPI_CSI_0_5) += phy-mtk-mipi-csi-0-5.o diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h new file mode 100644 index 000000000000..97b4c27a1699 --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#ifndef __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ +#define __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ + +/* + * CSI1 and CSI2 are identical, and similar to CSI0. All CSIX macros are + * applicable to the three PHYs. Where differences exist, they are denoted by + * macro names using CSI0 and CSI1, the latter being applicable to CSI1 and + * CSI2 alike. + */ + +#define MIPI_RX_ANA00_CSIXA 0x0000 +#define RG_CSI0A_CPHY_EN BIT(0) +#define RG_CSIXA_EQ_PROTECT_EN BIT(1) +#define RG_CSIXA_BG_LPF_EN BIT(2) +#define RG_CSIXA_BG_CORE_EN BIT(3) +#define RG_CSIXA_DPHY_L0_CKMODE_EN BIT(5) +#define RG_CSIXA_DPHY_L0_CKSEL BIT(6) +#define RG_CSIXA_DPHY_L1_CKMODE_EN BIT(8) +#define RG_CSIXA_DPHY_L1_CKSEL BIT(9) +#define RG_CSIXA_DPHY_L2_CKMODE_EN BIT(11) +#define RG_CSIXA_DPHY_L2_CKSEL BIT(12) + +#define MIPI_RX_ANA18_CSIXA 0x0018 +#define RG_CSI0A_L0_T0AB_EQ_IS GENMASK(5, 4) +#define RG_CSI0A_L0_T0AB_EQ_BW GENMASK(7, 6) +#define RG_CSI0A_L1_T1AB_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L1_T1AB_EQ_BW GENMASK(23, 22) +#define RG_CSI0A_L2_T1BC_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L2_T1BC_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L0_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L0_EQ_BW GENMASK(7, 6) +#define RG_CSI1A_L1_EQ_IS GENMASK(21, 20) +#define RG_CSI1A_L1_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L2_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L2_EQ_BW GENMASK(7, 6) + +#define MIPI_RX_ANA1C_CSIXA 0x001c +#define MIPI_RX_ANA20_CSI0A 0x0020 + +#define MIPI_RX_ANA24_CSIXA 0x0024 +#define RG_CSIXA_RESERVE GENMASK(31, 24) + +#define MIPI_RX_ANA40_CSIXA 0x0040 +#define RG_CSIXA_CPHY_FMCK_SEL GENMASK(1, 0) +#define RG_CSIXA_ASYNC_OPTION GENMASK(7, 4) +#define RG_CSIXA_CPHY_SPARE GENMASK(31, 16) + +#define MIPI_RX_WRAPPER80_CSIXA 0x0080 +#define CSR_CSI_RST_MODE GENMASK(17, 16) + +#define MIPI_RX_ANAA8_CSIXA 0x00a8 +#define RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT BIT(0) +#define RG_CSIXA_DPHY_L1_BYTECK_INVERT BIT(1) +#define RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT BIT(2) + +#endif diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c new file mode 100644 index 000000000000..6eafd7c0514c --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c @@ -0,0 +1,278 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MediaTek MIPI CSI v0.5 driver + * + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#include <dt-bindings/phy/phy.h> +#include <linux/bitfield.h> +#include <linux/delay.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/phy/phy.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include "phy-mtk-io.h" +#include "phy-mtk-mipi-csi-0-5-rx-reg.h" + +#define CSIXB_OFFSET 0x1000 + +struct mtk_mipi_dphy; + +struct mtk_mipi_dphy_port { + struct device *dev; + void __iomem *base; + struct phy *phy; + u32 type; +}; + +static void mtk_phy_csi_cdphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); +} + +static void mtk_phy_csi_dphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); +} + +static int mtk_mipi_phy_power_on(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* + * The driver currently supports DPHY and CD-PHY phys, + * but the only mode supported is DPHY, + * so CD-PHY capable phys must be configured in DPHY mode + */ + if (port->type == PHY_TYPE_CDPHY) { + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + } + + /* + * Lane configuration: + * + * Only 4 data + 1 clock is supported for now with the following mapping: + * + * CSIXA_LNR0 --> D2 + * CSIXA_LNR1 --> D0 + * CSIXA_LNR2 --> C + * CSIXB_LNR0 --> D1 + * CSIXB_LNR1 --> D3 + */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + /* Byte clock invert */ + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + /* Start ANA EQ tuning */ + if (port->type == PHY_TYPE_CDPHY) + mtk_phy_csi_cdphy_ana_eq_tune(base); + else + mtk_phy_csi_dphy_ana_eq_tune(base); + + /* End ANA EQ tuning */ + mtk_phy_set_bits(base + MIPI_RX_ANA40_CSIXA, 0x90); + + mtk_phy_update_field(base + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + /* ANA power on */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + usleep_range(20, 40); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + + return 0; +} + +static int mtk_mipi_phy_power_off(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* Disable MIPI BG. */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + return 0; +} + +static const struct phy_ops mtk_dphy_ops = { + .power_on = mtk_mipi_phy_power_on, + .power_off = mtk_mipi_phy_power_off, + .owner = THIS_MODULE, +}; + +static int mtk_mipi_dphy_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct phy_provider *phy_provider; + struct mtk_mipi_dphy_port *port; + struct phy *phy; + int ret; + + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); + if (!port) + return -ENOMEM; + + dev_set_drvdata(dev, port); + + port->dev = dev; + + port->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(port->base)) + return PTR_ERR(port->base); + + ret = of_property_read_u32(dev->of_node, "mediatek,phy-type", &port->type); + if (ret) { + dev_err(dev, "Failed to read mediatek,phy-type\n"); + return ret; + } + + phy = devm_phy_create(dev, NULL, &mtk_dphy_ops); + if (IS_ERR(phy)) { + dev_err(dev, "Failed to create PHY: %ld\n", PTR_ERR(phy)); + return PTR_ERR(phy); + } + + port->phy = phy; + phy_set_drvdata(phy, port); + + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) { + dev_err(dev, "Failed to register PHY provider: %ld\n", + PTR_ERR(phy_provider)); + return PTR_ERR(phy_provider); + } + + return 0; +} + +static const struct of_device_id mtk_mipi_dphy_of_match[] = { + { .compatible = "mediatek,mt8365-csi-rx" }, + { /* sentinel */}, +}; +MODULE_DEVICE_TABLE(of, mtk_mipi_dphy_of_match); + +static struct platform_driver mipi_dphy_pdrv = { + .probe = mtk_mipi_dphy_probe, + .driver = { + .name = "mtk-mipi-csi-0-5", + .of_match_table = mtk_mipi_dphy_of_match, + }, +}; +module_platform_driver(mipi_dphy_pdrv); + +MODULE_DESCRIPTION("MediaTek MIPI CSI CD-PHY v0.5 Driver"); +MODULE_AUTHOR("Louis Kuo <louis.kuo@mediatek.com>"); +MODULE_LICENSE("GPL"); -- 2.40.1 ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 3/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Phi-bang Nguyen, Louis Kuo, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Phi-bang Nguyen <pnguyen@baylibre.com> This is a new driver that supports the MIPI CSI CD-PHY version 0.5 The number of PHYs depend on the SoC. Each PHY can support D-PHY only or CD-PHY configuration. The driver supports only D-PHY mode, so CD-PHY compatible PHY are configured in D-PHY mode. Signed-off-by: Louis Kuo <louis.kuo@mediatek.com> Signed-off-by: Phi-bang Nguyen <pnguyen@baylibre.com> [Julien Stephan: refactor code] [Julien Stephan: simplify driver model: one instance per phy vs one instance for all phys] Co-developed-by: Julien Stephan <jstephan@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- MAINTAINERS | 1 + drivers/phy/mediatek/Kconfig | 12 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 62 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 278 ++++++++++++++++++ 5 files changed, 355 insertions(+) create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c diff --git a/MAINTAINERS b/MAINTAINERS index 5da594fbb761..e505023ffda1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13189,6 +13189,7 @@ M: Julien Stephan <jstephan@baylibre.com> M: Andy Hsieh <andy.hsieh@mediatek.com> S: Supported F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml +F: drivers/phy/mediatek/phy-mtk-mipi-csi-0-5* MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> diff --git a/drivers/phy/mediatek/Kconfig b/drivers/phy/mediatek/Kconfig index 3125ecb5d119..7088382ebc9e 100644 --- a/drivers/phy/mediatek/Kconfig +++ b/drivers/phy/mediatek/Kconfig @@ -74,3 +74,15 @@ config PHY_MTK_DP select GENERIC_PHY help Support DisplayPort PHY for MediaTek SoCs. + +config PHY_MTK_MIPI_CSI_0_5 + tristate "MediaTek MIPI CSI CD-PHY v0.5 Driver" + depends on ARCH_MEDIATEK || COMPILE_TEST + depends on OF + select GENERIC_PHY + help + Enable this to support the MIPI CSI CD-PHY receiver version 0.5. + The driver supports multiple CSI cdphy ports simultaneously. + + To compile this driver as a module, choose M here: the + module will be called phy-mtk-mipi-csi-0-5. diff --git a/drivers/phy/mediatek/Makefile b/drivers/phy/mediatek/Makefile index c9a50395533e..63f2fa3ec7e5 100644 --- a/drivers/phy/mediatek/Makefile +++ b/drivers/phy/mediatek/Makefile @@ -19,3 +19,5 @@ phy-mtk-mipi-dsi-drv-y := phy-mtk-mipi-dsi.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8173.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8183.o obj-$(CONFIG_PHY_MTK_MIPI_DSI) += phy-mtk-mipi-dsi-drv.o + +obj-$(CONFIG_PHY_MTK_MIPI_CSI_0_5) += phy-mtk-mipi-csi-0-5.o diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h new file mode 100644 index 000000000000..97b4c27a1699 --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#ifndef __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ +#define __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ + +/* + * CSI1 and CSI2 are identical, and similar to CSI0. All CSIX macros are + * applicable to the three PHYs. Where differences exist, they are denoted by + * macro names using CSI0 and CSI1, the latter being applicable to CSI1 and + * CSI2 alike. + */ + +#define MIPI_RX_ANA00_CSIXA 0x0000 +#define RG_CSI0A_CPHY_EN BIT(0) +#define RG_CSIXA_EQ_PROTECT_EN BIT(1) +#define RG_CSIXA_BG_LPF_EN BIT(2) +#define RG_CSIXA_BG_CORE_EN BIT(3) +#define RG_CSIXA_DPHY_L0_CKMODE_EN BIT(5) +#define RG_CSIXA_DPHY_L0_CKSEL BIT(6) +#define RG_CSIXA_DPHY_L1_CKMODE_EN BIT(8) +#define RG_CSIXA_DPHY_L1_CKSEL BIT(9) +#define RG_CSIXA_DPHY_L2_CKMODE_EN BIT(11) +#define RG_CSIXA_DPHY_L2_CKSEL BIT(12) + +#define MIPI_RX_ANA18_CSIXA 0x0018 +#define RG_CSI0A_L0_T0AB_EQ_IS GENMASK(5, 4) +#define RG_CSI0A_L0_T0AB_EQ_BW GENMASK(7, 6) +#define RG_CSI0A_L1_T1AB_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L1_T1AB_EQ_BW GENMASK(23, 22) +#define RG_CSI0A_L2_T1BC_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L2_T1BC_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L0_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L0_EQ_BW GENMASK(7, 6) +#define RG_CSI1A_L1_EQ_IS GENMASK(21, 20) +#define RG_CSI1A_L1_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L2_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L2_EQ_BW GENMASK(7, 6) + +#define MIPI_RX_ANA1C_CSIXA 0x001c +#define MIPI_RX_ANA20_CSI0A 0x0020 + +#define MIPI_RX_ANA24_CSIXA 0x0024 +#define RG_CSIXA_RESERVE GENMASK(31, 24) + +#define MIPI_RX_ANA40_CSIXA 0x0040 +#define RG_CSIXA_CPHY_FMCK_SEL GENMASK(1, 0) +#define RG_CSIXA_ASYNC_OPTION GENMASK(7, 4) +#define RG_CSIXA_CPHY_SPARE GENMASK(31, 16) + +#define MIPI_RX_WRAPPER80_CSIXA 0x0080 +#define CSR_CSI_RST_MODE GENMASK(17, 16) + +#define MIPI_RX_ANAA8_CSIXA 0x00a8 +#define RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT BIT(0) +#define RG_CSIXA_DPHY_L1_BYTECK_INVERT BIT(1) +#define RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT BIT(2) + +#endif diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c new file mode 100644 index 000000000000..6eafd7c0514c --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c @@ -0,0 +1,278 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MediaTek MIPI CSI v0.5 driver + * + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#include <dt-bindings/phy/phy.h> +#include <linux/bitfield.h> +#include <linux/delay.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/phy/phy.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include "phy-mtk-io.h" +#include "phy-mtk-mipi-csi-0-5-rx-reg.h" + +#define CSIXB_OFFSET 0x1000 + +struct mtk_mipi_dphy; + +struct mtk_mipi_dphy_port { + struct device *dev; + void __iomem *base; + struct phy *phy; + u32 type; +}; + +static void mtk_phy_csi_cdphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); +} + +static void mtk_phy_csi_dphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); +} + +static int mtk_mipi_phy_power_on(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* + * The driver currently supports DPHY and CD-PHY phys, + * but the only mode supported is DPHY, + * so CD-PHY capable phys must be configured in DPHY mode + */ + if (port->type == PHY_TYPE_CDPHY) { + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + } + + /* + * Lane configuration: + * + * Only 4 data + 1 clock is supported for now with the following mapping: + * + * CSIXA_LNR0 --> D2 + * CSIXA_LNR1 --> D0 + * CSIXA_LNR2 --> C + * CSIXB_LNR0 --> D1 + * CSIXB_LNR1 --> D3 + */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + /* Byte clock invert */ + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + /* Start ANA EQ tuning */ + if (port->type == PHY_TYPE_CDPHY) + mtk_phy_csi_cdphy_ana_eq_tune(base); + else + mtk_phy_csi_dphy_ana_eq_tune(base); + + /* End ANA EQ tuning */ + mtk_phy_set_bits(base + MIPI_RX_ANA40_CSIXA, 0x90); + + mtk_phy_update_field(base + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + /* ANA power on */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + usleep_range(20, 40); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + + return 0; +} + +static int mtk_mipi_phy_power_off(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* Disable MIPI BG. */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + return 0; +} + +static const struct phy_ops mtk_dphy_ops = { + .power_on = mtk_mipi_phy_power_on, + .power_off = mtk_mipi_phy_power_off, + .owner = THIS_MODULE, +}; + +static int mtk_mipi_dphy_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct phy_provider *phy_provider; + struct mtk_mipi_dphy_port *port; + struct phy *phy; + int ret; + + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); + if (!port) + return -ENOMEM; + + dev_set_drvdata(dev, port); + + port->dev = dev; + + port->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(port->base)) + return PTR_ERR(port->base); + + ret = of_property_read_u32(dev->of_node, "mediatek,phy-type", &port->type); + if (ret) { + dev_err(dev, "Failed to read mediatek,phy-type\n"); + return ret; + } + + phy = devm_phy_create(dev, NULL, &mtk_dphy_ops); + if (IS_ERR(phy)) { + dev_err(dev, "Failed to create PHY: %ld\n", PTR_ERR(phy)); + return PTR_ERR(phy); + } + + port->phy = phy; + phy_set_drvdata(phy, port); + + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) { + dev_err(dev, "Failed to register PHY provider: %ld\n", + PTR_ERR(phy_provider)); + return PTR_ERR(phy_provider); + } + + return 0; +} + +static const struct of_device_id mtk_mipi_dphy_of_match[] = { + { .compatible = "mediatek,mt8365-csi-rx" }, + { /* sentinel */}, +}; +MODULE_DEVICE_TABLE(of, mtk_mipi_dphy_of_match); + +static struct platform_driver mipi_dphy_pdrv = { + .probe = mtk_mipi_dphy_probe, + .driver = { + .name = "mtk-mipi-csi-0-5", + .of_match_table = mtk_mipi_dphy_of_match, + }, +}; +module_platform_driver(mipi_dphy_pdrv); + +MODULE_DESCRIPTION("MediaTek MIPI CSI CD-PHY v0.5 Driver"); +MODULE_AUTHOR("Louis Kuo <louis.kuo@mediatek.com>"); +MODULE_LICENSE("GPL"); -- 2.40.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 40+ messages in thread
* [PATCH v3 3/3] phy: mtk-mipi-csi: add driver for CSI phy @ 2023-05-24 8:30 ` Julien Stephan 0 siblings, 0 replies; 40+ messages in thread From: Julien Stephan @ 2023-05-24 8:30 UTC (permalink / raw) Cc: mkorpershoek, khilman, Phi-bang Nguyen, Louis Kuo, Julien Stephan, Andy Hsieh, AngeloGioacchino Del Regno, Chunfeng Yun, Chun-Kuang Hu, Conor Dooley, devicetree, dri-devel, Kishon Vijay Abraham I, Krzysztof Kozlowski, linux-arm-kernel, linux-kernel, linux-mediatek, linux-phy, Matthias Brugger, Philipp Zabel, Rob Herring, Vinod Koul From: Phi-bang Nguyen <pnguyen@baylibre.com> This is a new driver that supports the MIPI CSI CD-PHY version 0.5 The number of PHYs depend on the SoC. Each PHY can support D-PHY only or CD-PHY configuration. The driver supports only D-PHY mode, so CD-PHY compatible PHY are configured in D-PHY mode. Signed-off-by: Louis Kuo <louis.kuo@mediatek.com> Signed-off-by: Phi-bang Nguyen <pnguyen@baylibre.com> [Julien Stephan: refactor code] [Julien Stephan: simplify driver model: one instance per phy vs one instance for all phys] Co-developed-by: Julien Stephan <jstephan@baylibre.com> Signed-off-by: Julien Stephan <jstephan@baylibre.com> --- MAINTAINERS | 1 + drivers/phy/mediatek/Kconfig | 12 + drivers/phy/mediatek/Makefile | 2 + .../mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h | 62 ++++ drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c | 278 ++++++++++++++++++ 5 files changed, 355 insertions(+) create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c diff --git a/MAINTAINERS b/MAINTAINERS index 5da594fbb761..e505023ffda1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -13189,6 +13189,7 @@ M: Julien Stephan <jstephan@baylibre.com> M: Andy Hsieh <andy.hsieh@mediatek.com> S: Supported F: Documentation/devicetree/bindings/phy/mediatek,mt8365-csi-rx.yaml +F: drivers/phy/mediatek/phy-mtk-mipi-csi-0-5* MEDIATEK MMC/SD/SDIO DRIVER M: Chaotian Jing <chaotian.jing@mediatek.com> diff --git a/drivers/phy/mediatek/Kconfig b/drivers/phy/mediatek/Kconfig index 3125ecb5d119..7088382ebc9e 100644 --- a/drivers/phy/mediatek/Kconfig +++ b/drivers/phy/mediatek/Kconfig @@ -74,3 +74,15 @@ config PHY_MTK_DP select GENERIC_PHY help Support DisplayPort PHY for MediaTek SoCs. + +config PHY_MTK_MIPI_CSI_0_5 + tristate "MediaTek MIPI CSI CD-PHY v0.5 Driver" + depends on ARCH_MEDIATEK || COMPILE_TEST + depends on OF + select GENERIC_PHY + help + Enable this to support the MIPI CSI CD-PHY receiver version 0.5. + The driver supports multiple CSI cdphy ports simultaneously. + + To compile this driver as a module, choose M here: the + module will be called phy-mtk-mipi-csi-0-5. diff --git a/drivers/phy/mediatek/Makefile b/drivers/phy/mediatek/Makefile index c9a50395533e..63f2fa3ec7e5 100644 --- a/drivers/phy/mediatek/Makefile +++ b/drivers/phy/mediatek/Makefile @@ -19,3 +19,5 @@ phy-mtk-mipi-dsi-drv-y := phy-mtk-mipi-dsi.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8173.o phy-mtk-mipi-dsi-drv-y += phy-mtk-mipi-dsi-mt8183.o obj-$(CONFIG_PHY_MTK_MIPI_DSI) += phy-mtk-mipi-dsi-drv.o + +obj-$(CONFIG_PHY_MTK_MIPI_CSI_0_5) += phy-mtk-mipi-csi-0-5.o diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h new file mode 100644 index 000000000000..97b4c27a1699 --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5-rx-reg.h @@ -0,0 +1,62 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#ifndef __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ +#define __PHY_MTK_MIPI_CSI_V_0_5_RX_REG_H__ + +/* + * CSI1 and CSI2 are identical, and similar to CSI0. All CSIX macros are + * applicable to the three PHYs. Where differences exist, they are denoted by + * macro names using CSI0 and CSI1, the latter being applicable to CSI1 and + * CSI2 alike. + */ + +#define MIPI_RX_ANA00_CSIXA 0x0000 +#define RG_CSI0A_CPHY_EN BIT(0) +#define RG_CSIXA_EQ_PROTECT_EN BIT(1) +#define RG_CSIXA_BG_LPF_EN BIT(2) +#define RG_CSIXA_BG_CORE_EN BIT(3) +#define RG_CSIXA_DPHY_L0_CKMODE_EN BIT(5) +#define RG_CSIXA_DPHY_L0_CKSEL BIT(6) +#define RG_CSIXA_DPHY_L1_CKMODE_EN BIT(8) +#define RG_CSIXA_DPHY_L1_CKSEL BIT(9) +#define RG_CSIXA_DPHY_L2_CKMODE_EN BIT(11) +#define RG_CSIXA_DPHY_L2_CKSEL BIT(12) + +#define MIPI_RX_ANA18_CSIXA 0x0018 +#define RG_CSI0A_L0_T0AB_EQ_IS GENMASK(5, 4) +#define RG_CSI0A_L0_T0AB_EQ_BW GENMASK(7, 6) +#define RG_CSI0A_L1_T1AB_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L1_T1AB_EQ_BW GENMASK(23, 22) +#define RG_CSI0A_L2_T1BC_EQ_IS GENMASK(21, 20) +#define RG_CSI0A_L2_T1BC_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L0_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L0_EQ_BW GENMASK(7, 6) +#define RG_CSI1A_L1_EQ_IS GENMASK(21, 20) +#define RG_CSI1A_L1_EQ_BW GENMASK(23, 22) +#define RG_CSI1A_L2_EQ_IS GENMASK(5, 4) +#define RG_CSI1A_L2_EQ_BW GENMASK(7, 6) + +#define MIPI_RX_ANA1C_CSIXA 0x001c +#define MIPI_RX_ANA20_CSI0A 0x0020 + +#define MIPI_RX_ANA24_CSIXA 0x0024 +#define RG_CSIXA_RESERVE GENMASK(31, 24) + +#define MIPI_RX_ANA40_CSIXA 0x0040 +#define RG_CSIXA_CPHY_FMCK_SEL GENMASK(1, 0) +#define RG_CSIXA_ASYNC_OPTION GENMASK(7, 4) +#define RG_CSIXA_CPHY_SPARE GENMASK(31, 16) + +#define MIPI_RX_WRAPPER80_CSIXA 0x0080 +#define CSR_CSI_RST_MODE GENMASK(17, 16) + +#define MIPI_RX_ANAA8_CSIXA 0x00a8 +#define RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT BIT(0) +#define RG_CSIXA_DPHY_L1_BYTECK_INVERT BIT(1) +#define RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT BIT(2) + +#endif diff --git a/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c new file mode 100644 index 000000000000..6eafd7c0514c --- /dev/null +++ b/drivers/phy/mediatek/phy-mtk-mipi-csi-0-5.c @@ -0,0 +1,278 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * MediaTek MIPI CSI v0.5 driver + * + * Copyright (c) 2023, MediaTek Inc. + * Copyright (c) 2023, BayLibre Inc. + */ + +#include <dt-bindings/phy/phy.h> +#include <linux/bitfield.h> +#include <linux/delay.h> +#include <linux/io.h> +#include <linux/module.h> +#include <linux/mutex.h> +#include <linux/phy/phy.h> +#include <linux/platform_device.h> +#include <linux/slab.h> + +#include "phy-mtk-io.h" +#include "phy-mtk-mipi-csi-0-5-rx-reg.h" + +#define CSIXB_OFFSET 0x1000 + +struct mtk_mipi_dphy; + +struct mtk_mipi_dphy_port { + struct device *dev; + void __iomem *base; + struct phy *phy; + u32 type; +}; + +static void mtk_phy_csi_cdphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI0A_L0_T0AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI0A_L1_T1AB_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA20_CSI0A, + RG_CSI0A_L2_T1BC_EQ_BW, 1); +} + +static void mtk_phy_csi_dphy_ana_eq_tune(void __iomem *base) +{ + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L0_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA18_CSIXA, + RG_CSI1A_L1_EQ_BW, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_IS, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA1C_CSIXA, + RG_CSI1A_L2_EQ_BW, 1); +} + +static int mtk_mipi_phy_power_on(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* + * The driver currently supports DPHY and CD-PHY phys, + * but the only mode supported is DPHY, + * so CD-PHY capable phys must be configured in DPHY mode + */ + if (port->type == PHY_TYPE_CDPHY) { + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSI0A_CPHY_EN, 0); + } + + /* + * Lane configuration: + * + * Only 4 data + 1 clock is supported for now with the following mapping: + * + * CSIXA_LNR0 --> D2 + * CSIXA_LNR1 --> D0 + * CSIXA_LNR2 --> C + * CSIXB_LNR0 --> D1 + * CSIXB_LNR1 --> D3 + */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 1); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L0_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L1_CKSEL, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKMODE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_DPHY_L2_CKSEL, 1); + + /* Byte clock invert */ + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L0_T0_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_DPHY_L1_BYTECK_INVERT, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANAA8_CSIXA, + RG_CSIXA_CDPHY_L2_T1_BYTECK_INVERT, 1); + + /* Start ANA EQ tuning */ + if (port->type == PHY_TYPE_CDPHY) + mtk_phy_csi_cdphy_ana_eq_tune(base); + else + mtk_phy_csi_dphy_ana_eq_tune(base); + + /* End ANA EQ tuning */ + mtk_phy_set_bits(base + MIPI_RX_ANA40_CSIXA, 0x90); + + mtk_phy_update_field(base + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA24_CSIXA, + RG_CSIXA_RESERVE, 0x40); + mtk_phy_update_field(base + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_WRAPPER80_CSIXA, + CSR_CSI_RST_MODE, 0); + /* ANA power on */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 1); + usleep_range(20, 40); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 1); + + return 0; +} + +static int mtk_mipi_phy_power_off(struct phy *phy) +{ + struct mtk_mipi_dphy_port *port = phy_get_drvdata(phy); + void __iomem *base = port->base; + + /* Disable MIPI BG. */ + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_CORE_EN, 0); + mtk_phy_update_field(base + CSIXB_OFFSET + MIPI_RX_ANA00_CSIXA, + RG_CSIXA_BG_LPF_EN, 0); + + return 0; +} + +static const struct phy_ops mtk_dphy_ops = { + .power_on = mtk_mipi_phy_power_on, + .power_off = mtk_mipi_phy_power_off, + .owner = THIS_MODULE, +}; + +static int mtk_mipi_dphy_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct phy_provider *phy_provider; + struct mtk_mipi_dphy_port *port; + struct phy *phy; + int ret; + + port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL); + if (!port) + return -ENOMEM; + + dev_set_drvdata(dev, port); + + port->dev = dev; + + port->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(port->base)) + return PTR_ERR(port->base); + + ret = of_property_read_u32(dev->of_node, "mediatek,phy-type", &port->type); + if (ret) { + dev_err(dev, "Failed to read mediatek,phy-type\n"); + return ret; + } + + phy = devm_phy_create(dev, NULL, &mtk_dphy_ops); + if (IS_ERR(phy)) { + dev_err(dev, "Failed to create PHY: %ld\n", PTR_ERR(phy)); + return PTR_ERR(phy); + } + + port->phy = phy; + phy_set_drvdata(phy, port); + + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) { + dev_err(dev, "Failed to register PHY provider: %ld\n", + PTR_ERR(phy_provider)); + return PTR_ERR(phy_provider); + } + + return 0; +} + +static const struct of_device_id mtk_mipi_dphy_of_match[] = { + { .compatible = "mediatek,mt8365-csi-rx" }, + { /* sentinel */}, +}; +MODULE_DEVICE_TABLE(of, mtk_mipi_dphy_of_match); + +static struct platform_driver mipi_dphy_pdrv = { + .probe = mtk_mipi_dphy_probe, + .driver = { + .name = "mtk-mipi-csi-0-5", + .of_match_table = mtk_mipi_dphy_of_match, + }, +}; +module_platform_driver(mipi_dphy_pdrv); + +MODULE_DESCRIPTION("MediaTek MIPI CSI CD-PHY v0.5 Driver"); +MODULE_AUTHOR("Louis Kuo <louis.kuo@mediatek.com>"); +MODULE_LICENSE("GPL"); -- 2.40.1 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 40+ messages in thread
end of thread, other threads:[~2023-06-08 20:06 UTC | newest] Thread overview: 40+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-05-24 8:30 [PATCH v3 0/3] phy: mtk-mipi-csi: add driver for CSI phy Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` [PATCH v3 1/3] dt-bindings: phy: add PHY_TYPE_CDPHY definition Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-06-03 19:09 ` Krzysztof Kozlowski 2023-06-03 19:09 ` Krzysztof Kozlowski 2023-06-03 19:09 ` Krzysztof Kozlowski 2023-06-03 19:09 ` Krzysztof Kozlowski 2023-05-24 8:30 ` [PATCH v3 2/3] dt-bindings: phy: add mediatek MIPI CD-PHY module v0.5 Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 9:45 ` AngeloGioacchino Del Regno 2023-05-24 14:05 ` Julien Stephan 2023-05-24 14:05 ` Julien Stephan 2023-05-24 14:05 ` Julien Stephan 2023-05-24 14:05 ` Julien Stephan 2023-06-08 20:05 ` Rob Herring 2023-06-08 20:05 ` Rob Herring 2023-06-08 20:05 ` Rob Herring 2023-06-08 20:05 ` Rob Herring 2023-05-24 8:30 ` [PATCH v3 3/3] phy: mtk-mipi-csi: add driver for CSI phy Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan 2023-05-24 8:30 ` Julien Stephan
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.