On Mon Jan 13 10:01:26 2025 +0530, Depeng Shao wrote:
> The RUP registers and buf done irq are moved from the IFE to CSID register
> block on recent CAMSS implementations. Add callbacks structure to wrapper
> the location change with minimum logic disruption.
> 
> Co-developed-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
> Signed-off-by: Bryan O'Donoghue <bryan.odonog...@linaro.org>
> Signed-off-by: Depeng Shao <quic_depe...@quicinc.com>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/platform/qcom/camss/camss-csid.h |  9 +++++++++
 drivers/media/platform/qcom/camss/camss.c      | 22 ++++++++++++++++++++++
 drivers/media/platform/qcom/camss/camss.h      |  3 +++
 3 files changed, 34 insertions(+)

---

diff --git a/drivers/media/platform/qcom/camss/camss-csid.h 
b/drivers/media/platform/qcom/camss/camss-csid.h
index f52209b96583..4f8765c251bc 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.h
+++ b/drivers/media/platform/qcom/camss/camss-csid.h
@@ -152,6 +152,14 @@ struct csid_hw_ops {
         * @csid: CSID device
         */
        void (*subdev_init)(struct csid_device *csid);
+
+       /*
+        * reg_update - receive message from other sub device
+        * @csid: CSID device
+        * @port_id: Port id
+        * @is_clear: Indicate if it is clearing reg update or setting reg 
update
+        */
+       void (*reg_update)(struct csid_device *csid, int port_id, bool 
is_clear);
 };
 
 struct csid_subdev_resources {
@@ -169,6 +177,7 @@ struct csid_device {
        void __iomem *base;
        u32 irq;
        char irq_name[30];
+       u32 reg_update;
        struct camss_clock *clock;
        int nclocks;
        struct regulator_bulk_data *supplies;
diff --git a/drivers/media/platform/qcom/camss/camss.c 
b/drivers/media/platform/qcom/camss/camss.c
index b1358457c66e..b7ee959f7b31 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -2408,6 +2408,28 @@ static int camss_link_entities(struct camss *camss)
        return 0;
 }
 
+void camss_reg_update(struct camss *camss, int hw_id, int port_id, bool 
is_clear)
+{
+       struct csid_device *csid;
+
+       if (hw_id < camss->res->csid_num) {
+               csid = &camss->csid[hw_id];
+
+               csid->res->hw_ops->reg_update(csid, port_id, is_clear);
+       }
+}
+
+void camss_buf_done(struct camss *camss, int hw_id, int port_id)
+{
+       struct vfe_device *vfe;
+
+       if (hw_id < camss->res->vfe_num) {
+               vfe = &camss->vfe[hw_id];
+
+               vfe->res->hw_ops->vfe_buf_done(vfe, port_id);
+       }
+}
+
 /*
  * camss_register_entities - Register subdev nodes and create links
  * @camss: CAMSS device
diff --git a/drivers/media/platform/qcom/camss/camss.h 
b/drivers/media/platform/qcom/camss/camss.h
index 9a046eea334f..bd1d1d2b831d 100644
--- a/drivers/media/platform/qcom/camss/camss.h
+++ b/drivers/media/platform/qcom/camss/camss.h
@@ -162,5 +162,8 @@ void camss_pm_domain_off(struct camss *camss, int id);
 int camss_vfe_get(struct camss *camss, int id);
 void camss_vfe_put(struct camss *camss, int id);
 void camss_delete(struct camss *camss);
+void camss_buf_done(struct camss *camss, int hw_id, int port_id);
+void camss_reg_update(struct camss *camss, int hw_id,
+                     int port_id, bool is_clear);
 
 #endif /* QC_MSM_CAMSS_H */

Reply via email to