Re: [PATCH v7 3/5] i3c: mipi-i3c-hci: add microchip sama7d65 SoC compatible with the required quirk
Frank Li <[email protected]>
| Newsgroups | org.infradead.lists.linux-i3c,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-clk,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <aib2GC4dtOBVFxpU@lizhi-Precision-Tower-5810> |
On Mon, May 25, 2026 at 02:54:03PM +0530, Manikandan Muralidharan wrote: > 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 <[email protected]> > Signed-off-by: Manikandan Muralidharan <[email protected]> Reviewed-by: Frank Li <[email protected]> > --- > Changes in v7: > - Use (void *)(ulong) cast instead of direct (void *) cast in > of_device_id.data for pointer-size safety across architectures > - Update commit message body to explicitly mention quirk application > > Changes in v6: > - Reorder local variable definitions in i3c_hci_probe in descending > order of line length > > Changes in v5: > - Remove HCI_QUIRK_CLK_SUPPORT quirk and call > devm_clk_bulk_get_all_enabled unconditionally, eliminating the > need for a clock-specific quirk flag > > Changes in v4: > - Remove the clock index variable MCHP_I3C_CLK_IDX as it is no > longer needed after switching to bulk clock handling > > Changes in v3: > - Make use of existing HCI_QUIRK_* code base instead of introducing > separate MCHP_HCI_QUIRK_* flags > - Introduce HCI_QUIRK_CLK_SUPPORT to handle peripheral and system > generic clk in bulk > > Changes in v2: > - Platform specific changes integrated in the existing mipi-i3c-hci > driver by introducing separate MCHP_HCI_QUIRK_* quirks and vendor > specific quirk files rather than a standalone driver > > drivers/i3c/master/mipi-i3c-hci/core.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/i3c/master/mipi-i3c-hci/core.c b/drivers/i3c/master/mipi-i3c-hci/core.c > index b781dbed2165..4cdf2abd4219 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> > @@ -969,6 +970,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; > > @@ -1001,6 +1003,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; > @@ -1031,6 +1038,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); > -- > 2.25.1 > -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c