]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
i3c: mipi-i3c-hci: add microchip sama7d65 SoC compatible with the required quirk
authorManikandan Muralidharan <manikandan.m@microchip.com>
Mon, 25 May 2026 09:24:03 +0000 (14:54 +0530)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sun, 14 Jun 2026 20:38:43 +0000 (22:38 +0200)
Add support for microchip sama7d65 SoC I3C HCI master only IP
with additional clock support to enable bulk clock acquisition
and apply the required quirks.

Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Manikandan Muralidharan <manikandan.m@microchip.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260525092405.1514213-4-manikandan.m@microchip.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/i3c/master/mipi-i3c-hci/core.c

index fffbc1775ef960890363fd65bc4e71e64571c1d1..3a3a9a3d4decfc936e371ae8d74ac81a502b1092 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include <linux/bitfield.h>
+#include <linux/clk.h>
 #include <linux/device.h>
 #include <linux/errno.h>
 #include <linux/i3c/master.h>
@@ -1105,6 +1106,7 @@ static int i3c_hci_init(struct i3c_hci *hci)
 static int i3c_hci_probe(struct platform_device *pdev)
 {
        const struct mipi_i3c_hci_platform_data *pdata = pdev->dev.platform_data;
+       struct clk_bulk_data *clks;
        struct i3c_hci *hci;
        int irq, ret;
 
@@ -1138,6 +1140,11 @@ static int i3c_hci_probe(struct platform_device *pdev)
        if (!hci->quirks && platform_get_device_id(pdev))
                hci->quirks = platform_get_device_id(pdev)->driver_data;
 
+       ret = devm_clk_bulk_get_all_enabled(&pdev->dev, &clks);
+       if (ret < 0)
+               return dev_err_probe(&pdev->dev, ret,
+                                    "Failed to get clocks\n");
+
        ret = i3c_hci_init(hci);
        if (ret)
                return ret;
@@ -1168,6 +1175,9 @@ static void i3c_hci_remove(struct platform_device *pdev)
 
 static const __maybe_unused struct of_device_id i3c_hci_of_match[] = {
        { .compatible = "mipi-i3c-hci", },
+       { .compatible = "microchip,sama7d65-i3c-hci",
+         .data = (void *)(ulong)(HCI_QUIRK_PIO_MODE | HCI_QUIRK_OD_PP_TIMING |
+                                 HCI_QUIRK_RESP_BUF_THLD) },
        {},
 };
 MODULE_DEVICE_TABLE(of, i3c_hci_of_match);