summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManikandan Muralidharan <manikandan.m@microchip.com>2026-05-25 12:24:03 +0300
committerAlexandre Belloni <alexandre.belloni@bootlin.com>2026-06-14 23:38:43 +0300
commitefaa912ab0f185dbde4443946cb4b8cd832262e4 (patch)
treece718264b80bede03c2203e0dad1139d17483e65
parent9092105b87afcb38913919af82b38370ba69a7ea (diff)
downloadlinux-efaa912ab0f185dbde4443946cb4b8cd832262e4.tar.xz
i3c: mipi-i3c-hci: add microchip sama7d65 SoC compatible with the required quirk
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>
-rw-r--r--drivers/i3c/master/mipi-i3c-hci/core.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/i3c/master/mipi-i3c-hci/core.c b/drivers/i3c/master/mipi-i3c-hci/core.c
index fffbc1775ef9..3a3a9a3d4dec 100644
--- a/drivers/i3c/master/mipi-i3c-hci/core.c
+++ b/drivers/i3c/master/mipi-i3c-hci/core.c
@@ -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);