From: Alice Guo <alice....@nxp.com>

This patch adds SCMI pin control protocol support so that the pin
controller driver based on SCMI, such as
drivers/pinctrl/nxp/pinctrl-scmi.c, can be bound to the SCMI agent
device whose protocol id is 0x19.

Signed-off-by: Alice Guo <alice....@nxp.com>
---
 drivers/firmware/scmi/scmi_agent-uclass.c | 11 +++++++++++
 include/scmi_agent-uclass.h               |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c 
b/drivers/firmware/scmi/scmi_agent-uclass.c
index 8c907c3b03..5f101f4ede 100644
--- a/drivers/firmware/scmi/scmi_agent-uclass.c
+++ b/drivers/firmware/scmi/scmi_agent-uclass.c
@@ -97,6 +97,9 @@ struct udevice *scmi_get_protocol(struct udevice *dev,
        case SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN:
                proto = priv->voltagedom_dev;
                break;
+       case SCMI_PROTOCOL_ID_PINCTRL:
+               proto = priv->pinctrl_dev;
+               break;
        default:
                dev_err(dev, "Protocol not supported\n");
                proto = NULL;
@@ -147,6 +150,9 @@ static int scmi_add_protocol(struct udevice *dev,
        case SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN:
                priv->voltagedom_dev = proto;
                break;
+       case SCMI_PROTOCOL_ID_PINCTRL:
+               priv->pinctrl_dev = proto;
+               break;
        default:
                dev_err(dev, "Protocol not supported\n");
                return -EPROTO;
@@ -436,6 +442,11 @@ static int scmi_bind_protocols(struct udevice *dev)
                                drv = DM_DRIVER_GET(scmi_voltage_domain);
                        }
                        break;
+               case SCMI_PROTOCOL_ID_PINCTRL:
+                       if (IS_ENABLED(CONFIG_PINCTRL_IMX_SCMI) &&
+                           scmi_protocol_is_supported(dev, protocol_id))
+                               drv = DM_DRIVER_GET(scmi_pinctrl_imx);
+                       break;
                default:
                        break;
                }
diff --git a/include/scmi_agent-uclass.h b/include/scmi_agent-uclass.h
index 33e0e18c30..4beec43cb0 100644
--- a/include/scmi_agent-uclass.h
+++ b/include/scmi_agent-uclass.h
@@ -27,6 +27,7 @@ struct scmi_channel;
  * @clock_dev:         SCMI clock protocol device
  * @resetdom_dev:      SCMI reset domain protocol device
  * @voltagedom_dev:    SCMI voltage domain protocol device
+ * @pinctrl_dev:       SCMI pin control protocol device
  */
 struct scmi_agent_priv {
        u32 version;
@@ -43,6 +44,7 @@ struct scmi_agent_priv {
        struct udevice *clock_dev;
        struct udevice *resetdom_dev;
        struct udevice *voltagedom_dev;
+       struct udevice *pinctrl_dev;
 };
 
 static inline u32 scmi_version(struct udevice *dev)

-- 
2.43.0

Reply via email to