Re: [PATCH v9 17/22] phy: phy-mtk-dp: Add driver for DP phy

2022-04-12 Thread Guillaume Ranquet
On Mon, 28 Mar 2022 10:20, AngeloGioacchino Del Regno
 wrote:
>Il 28/03/22 00:39, Guillaume Ranquet ha scritto:
>> From: Markus Schneider-Pargmann 
>>
>> This is a new driver that supports the integrated DisplayPort phy for
>> mediatek SoCs, especially the mt8195. The phy is integrated into the
>> DisplayPort controller and will be created by the mtk-dp driver. This
>> driver expects a struct regmap to be able to work on the same registers
>> as the DisplayPort controller. It sets the device data to be the struct
>> phy so that the DisplayPort controller can easily work with it.
>>
>> The driver does not have any devicetree bindings because the datasheet
>> does not list the controller and the phy as distinct units.
>>
>> The interaction with the controller can be covered by the configure
>> callback of the phy framework and its displayport parameters.
>>
>> Signed-off-by: Markus Schneider-Pargmann 
>> Signed-off-by: Guillaume Ranquet 
>> ---
>>   MAINTAINERS   |   1 +
>>   drivers/phy/mediatek/Kconfig  |   8 ++
>>   drivers/phy/mediatek/Makefile |   1 +
>>   drivers/phy/mediatek/phy-mtk-dp.c | 201 ++
>>   4 files changed, 211 insertions(+)
>>   create mode 100644 drivers/phy/mediatek/phy-mtk-dp.c
>>
>
>..snip..
>
>> diff --git a/drivers/phy/mediatek/phy-mtk-dp.c 
>> b/drivers/phy/mediatek/phy-mtk-dp.c
>> new file mode 100644
>> index ..e5c5494f3636
>> --- /dev/null
>> +++ b/drivers/phy/mediatek/phy-mtk-dp.c
>
>..snip..
>
>> +
>> +static int mtk_dp_phy_probe(struct platform_device *pdev)
>> +{
>> +struct device *dev = >dev;
>> +struct mtk_dp_phy *dp_phy;
>> +struct phy *phy;
>> +struct regmap *regs;
>> +
>> +regs = syscon_regmap_lookup_by_phandle(dev->of_node, 
>> "mediatek,dp-syscon");
>> +
>
>Please drop this blank line
>
>> +if (IS_ERR(regs))
>> +return PTR_ERR(regs);
>> +
>> +dp_phy = devm_kzalloc(dev, sizeof(*dp_phy), GFP_KERNEL);
>> +if (!dp_phy)
>> +return -ENOMEM;
>> +
>> +dp_phy->regs = regs;
>> +
>> +phy = devm_phy_create(dev, NULL, _dp_phy_dev_ops);
>> +
>
>Same here
>
>> +if (IS_ERR(phy))
>> +return dev_err_probe(dev, PTR_ERR(phy), "Failed to create DP 
>> PHY: %ld\n", PTR_ERR(phy));
>> +
>
>Using dev_err_probe automates printing the error, so the correct usage is:
>
>return dev_err_probe(dev, PTR_ERR(phy), "Failed to create DP PHY\n");
>
>> +phy_set_drvdata(phy, dp_phy);
>> +
>> +return 0;
>> +}
>> +
>> +struct platform_driver mtk_dp_phy_driver = {
>> +.probe = mtk_dp_phy_probe,
>> +.driver = {
>> +.name = "mediatek-dp-phy",
>> +},
>> +};
>> +module_platform_driver(mtk_dp_phy_driver);
>
>Also, in your dt-binding, you mention a compatible for this driver, but I 
>don't see
>any, here. This means that you do know what to do, so please do it.
>

Following the comments from rob [1], I'll revert back to using
platform_device_register_data() from v8.

[1] 
https://lore.kernel.org/linux-mediatek/ykopb5w7uxkoc72...@robh.at.kernel.org/

>Regards,
>Angelo
>
>> +
>> +MODULE_AUTHOR("Markus Schneider-Pargmann ");
>> +MODULE_DESCRIPTION("MediaTek DP PHY Driver");
>> +MODULE_LICENSE("GPL");
>


Re: [PATCH v9 17/22] phy: phy-mtk-dp: Add driver for DP phy

2022-03-28 Thread AngeloGioacchino Del Regno

Il 28/03/22 00:39, Guillaume Ranquet ha scritto:

From: Markus Schneider-Pargmann 

This is a new driver that supports the integrated DisplayPort phy for
mediatek SoCs, especially the mt8195. The phy is integrated into the
DisplayPort controller and will be created by the mtk-dp driver. This
driver expects a struct regmap to be able to work on the same registers
as the DisplayPort controller. It sets the device data to be the struct
phy so that the DisplayPort controller can easily work with it.

The driver does not have any devicetree bindings because the datasheet
does not list the controller and the phy as distinct units.

The interaction with the controller can be covered by the configure
callback of the phy framework and its displayport parameters.

Signed-off-by: Markus Schneider-Pargmann 
Signed-off-by: Guillaume Ranquet 
---
  MAINTAINERS   |   1 +
  drivers/phy/mediatek/Kconfig  |   8 ++
  drivers/phy/mediatek/Makefile |   1 +
  drivers/phy/mediatek/phy-mtk-dp.c | 201 ++
  4 files changed, 211 insertions(+)
  create mode 100644 drivers/phy/mediatek/phy-mtk-dp.c



..snip..


diff --git a/drivers/phy/mediatek/phy-mtk-dp.c 
b/drivers/phy/mediatek/phy-mtk-dp.c
new file mode 100644
index ..e5c5494f3636
--- /dev/null
+++ b/drivers/phy/mediatek/phy-mtk-dp.c


..snip..


+
+static int mtk_dp_phy_probe(struct platform_device *pdev)
+{
+   struct device *dev = >dev;
+   struct mtk_dp_phy *dp_phy;
+   struct phy *phy;
+   struct regmap *regs;
+
+   regs = syscon_regmap_lookup_by_phandle(dev->of_node, 
"mediatek,dp-syscon");
+


Please drop this blank line


+   if (IS_ERR(regs))
+   return PTR_ERR(regs);
+
+   dp_phy = devm_kzalloc(dev, sizeof(*dp_phy), GFP_KERNEL);
+   if (!dp_phy)
+   return -ENOMEM;
+
+   dp_phy->regs = regs;
+
+   phy = devm_phy_create(dev, NULL, _dp_phy_dev_ops);
+


Same here


+   if (IS_ERR(phy))
+   return dev_err_probe(dev, PTR_ERR(phy), "Failed to create DP PHY: 
%ld\n", PTR_ERR(phy));
+


Using dev_err_probe automates printing the error, so the correct usage is:

return dev_err_probe(dev, PTR_ERR(phy), "Failed to create DP PHY\n");


+   phy_set_drvdata(phy, dp_phy);
+
+   return 0;
+}
+
+struct platform_driver mtk_dp_phy_driver = {
+   .probe = mtk_dp_phy_probe,
+   .driver = {
+   .name = "mediatek-dp-phy",
+   },
+};
+module_platform_driver(mtk_dp_phy_driver);


Also, in your dt-binding, you mention a compatible for this driver, but I don't 
see
any, here. This means that you do know what to do, so please do it.

Regards,
Angelo


+
+MODULE_AUTHOR("Markus Schneider-Pargmann ");
+MODULE_DESCRIPTION("MediaTek DP PHY Driver");
+MODULE_LICENSE("GPL");




[PATCH v9 17/22] phy: phy-mtk-dp: Add driver for DP phy

2022-03-27 Thread Guillaume Ranquet
From: Markus Schneider-Pargmann 

This is a new driver that supports the integrated DisplayPort phy for
mediatek SoCs, especially the mt8195. The phy is integrated into the
DisplayPort controller and will be created by the mtk-dp driver. This
driver expects a struct regmap to be able to work on the same registers
as the DisplayPort controller. It sets the device data to be the struct
phy so that the DisplayPort controller can easily work with it.

The driver does not have any devicetree bindings because the datasheet
does not list the controller and the phy as distinct units.

The interaction with the controller can be covered by the configure
callback of the phy framework and its displayport parameters.

Signed-off-by: Markus Schneider-Pargmann 
Signed-off-by: Guillaume Ranquet 
---
 MAINTAINERS   |   1 +
 drivers/phy/mediatek/Kconfig  |   8 ++
 drivers/phy/mediatek/Makefile |   1 +
 drivers/phy/mediatek/phy-mtk-dp.c | 201 ++
 4 files changed, 211 insertions(+)
 create mode 100644 drivers/phy/mediatek/phy-mtk-dp.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 4cc47b2dbdc9..bfca96469d80 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6604,6 +6604,7 @@ L:linux-media...@lists.infradead.org (moderated 
for non-subscribers)
 S: Supported
 F: Documentation/devicetree/bindings/display/mediatek/
 F: drivers/gpu/drm/mediatek/
+F: drivers/phy/mediatek/phy-mtk-dp.c
 F: drivers/phy/mediatek/phy-mtk-hdmi*
 F: drivers/phy/mediatek/phy-mtk-mipi*
 
diff --git a/drivers/phy/mediatek/Kconfig b/drivers/phy/mediatek/Kconfig
index 55f8e6c048ab..f7ec86059049 100644
--- a/drivers/phy/mediatek/Kconfig
+++ b/drivers/phy/mediatek/Kconfig
@@ -55,3 +55,11 @@ config PHY_MTK_MIPI_DSI
select GENERIC_PHY
help
  Support MIPI DSI for Mediatek SoCs.
+
+config PHY_MTK_DP
+   tristate "MediaTek DP-PHY Driver"
+   depends on ARCH_MEDIATEK || COMPILE_TEST
+   depends on OF
+   select GENERIC_PHY
+   help
+ Support DisplayPort PHY for Mediatek SoCs.
diff --git a/drivers/phy/mediatek/Makefile b/drivers/phy/mediatek/Makefile
index ace660fbed3a..4ba1e0650434 100644
--- a/drivers/phy/mediatek/Makefile
+++ b/drivers/phy/mediatek/Makefile
@@ -3,6 +3,7 @@
 # Makefile for the phy drivers.
 #
 
+obj-$(CONFIG_PHY_MTK_DP)   += phy-mtk-dp.o
 obj-$(CONFIG_PHY_MTK_TPHY) += phy-mtk-tphy.o
 obj-$(CONFIG_PHY_MTK_UFS)  += phy-mtk-ufs.o
 obj-$(CONFIG_PHY_MTK_XSPHY)+= phy-mtk-xsphy.o
diff --git a/drivers/phy/mediatek/phy-mtk-dp.c 
b/drivers/phy/mediatek/phy-mtk-dp.c
new file mode 100644
index ..e5c5494f3636
--- /dev/null
+++ b/drivers/phy/mediatek/phy-mtk-dp.c
@@ -0,0 +1,201 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek DisplayPort PHY driver
+ *
+ * Copyright (c) 2021 BayLibre
+ * Author: Markus Schneider-Pargmann 
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define PHY_OFFSET 0x1000
+
+#define MTK_DP_PHY_DIG_PLL_CTL_1   (PHY_OFFSET + 0x14)
+#define TPLL_SSC_ENBIT(3)
+
+#define MTK_DP_PHY_DIG_BIT_RATE(PHY_OFFSET + 0x3C)
+#define BIT_RATE_RBR   0
+#define BIT_RATE_HBR   1
+#define BIT_RATE_HBR2  2
+#define BIT_RATE_HBR3  3
+
+#define MTK_DP_PHY_DIG_SW_RST  (PHY_OFFSET + 0x38)
+#define DP_GLB_SW_RST_PHYD BIT(0)
+
+#define MTK_DP_LANE0_DRIVING_PARAM_3   (PHY_OFFSET + 0x138)
+#define MTK_DP_LANE1_DRIVING_PARAM_3   (PHY_OFFSET + 0x238)
+#define MTK_DP_LANE2_DRIVING_PARAM_3   (PHY_OFFSET + 0x338)
+#define MTK_DP_LANE3_DRIVING_PARAM_3   (PHY_OFFSET + 0x438)
+#define XTP_LN_TX_LCTXC0_SW0_PRE0_DEFAULT  BIT(4)
+#define XTP_LN_TX_LCTXC0_SW0_PRE1_DEFAULT  ((BIT(2) | BIT(4)) << 8)
+#define XTP_LN_TX_LCTXC0_SW0_PRE2_DEFAULT  GENMASK(20, 19)
+#define XTP_LN_TX_LCTXC0_SW0_PRE3_DEFAULT  GENMASK(29, 29)
+#define DRIVING_PARAM_3_DEFAULT
(XTP_LN_TX_LCTXC0_SW0_PRE0_DEFAULT | \
+
XTP_LN_TX_LCTXC0_SW0_PRE1_DEFAULT | \
+
XTP_LN_TX_LCTXC0_SW0_PRE2_DEFAULT | \
+
XTP_LN_TX_LCTXC0_SW0_PRE3_DEFAULT)
+
+#define XTP_LN_TX_LCTXC0_SW1_PRE0_DEFAULT  GENMASK(4, 3)
+#define XTP_LN_TX_LCTXC0_SW1_PRE1_DEFAULT  GENMASK(12, 9)
+#define XTP_LN_TX_LCTXC0_SW1_PRE2_DEFAULT  ((BIT(2) | BIT(5)) << 16)
+#define XTP_LN_TX_LCTXC0_SW2_PRE0_DEFAULT  GENMASK(29, 29)
+#define DRIVING_PARAM_4_DEFAULT
(XTP_LN_TX_LCTXC0_SW1_PRE0_DEFAULT | \
+
XTP_LN_TX_LCTXC0_SW1_PRE1_DEFAULT | \
+
XTP_LN_TX_LCTXC0_SW1_PRE2_DEFAULT | \
+