diff mbox series

[v2,3/4] soc: qcom: geni-se: Export function geni_se_clks_off()

Message ID 20240906191438.4104329-4-quic_msavaliy@quicinc.com
State Handled Elsewhere
Delegated to: Andi Shyti
Headers show
Series Enable shared SE support over I2C | expand

Commit Message

Mukesh Kumar Savaliya Sept. 6, 2024, 7:14 p.m. UTC
Currently the driver provides a function called geni_serial_resources_off()
to turn off resources like clocks and  pinctrl. We don't have a function to
control clocks separately hence, export the function geni_se_clks_off() to
turn off clocks separately without disturbing GPIO.

Client drivers like I2C require this function for use-cases where the I2C
SE is shared between two subsystems.

Signed-off-by: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
---
 drivers/soc/qcom/qcom-geni-se.c  | 4 +++-
 include/linux/soc/qcom/geni-se.h | 3 +++
 2 files changed, 6 insertions(+), 1 deletion(-)

Comments

Konrad Dybcio Sept. 9, 2024, 11:35 a.m. UTC | #1
On 6.09.2024 9:14 PM, Mukesh Kumar Savaliya wrote:
> Currently the driver provides a function called geni_serial_resources_off()
> to turn off resources like clocks and  pinctrl. We don't have a function to
> control clocks separately hence, export the function geni_se_clks_off() to
> turn off clocks separately without disturbing GPIO.
> 
> Client drivers like I2C require this function for use-cases where the I2C
> SE is shared between two subsystems.
> 
> Signed-off-by: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
> ---

Well, i2c is probably not the only type of client you'll want
to share and the current approach requires changes in all protocol
drivers.

How about adding a parameter like `bool shared_se` to
geni_se_resources_off() and changing the pinctrl state conditionally?

Konrad
Mukesh Kumar Savaliya Sept. 10, 2024, 9:11 a.m. UTC | #2
Hi Konrad, Thanks !

On 9/9/2024 5:05 PM, Konrad Dybcio wrote:
> On 6.09.2024 9:14 PM, Mukesh Kumar Savaliya wrote:
>> Currently the driver provides a function called geni_serial_resources_off()
>> to turn off resources like clocks and  pinctrl. We don't have a function to
>> control clocks separately hence, export the function geni_se_clks_off() to
>> turn off clocks separately without disturbing GPIO.
>>
>> Client drivers like I2C require this function for use-cases where the I2C
>> SE is shared between two subsystems.
>>
>> Signed-off-by: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
>> ---
> 
> Well, i2c is probably not the only type of client you'll want
> to share and the current approach requires changes in all protocol
> drivers.
> 
That's true, it may require for other drivers too in future.
But logically seems more aligning to be handle at client driver side.
Meaning if it's required by SPI  client like touch, they can add this 
flag into touch client DT node.
> How about adding a parameter like `bool shared_se` to
> geni_se_resources_off() and changing the pinctrl state conditionally?
> 
Sure, Looks good design. This needs a change in common struct geni_se 
which can add this flag and set to true from i2c driver struct 
geni_i2c_dev->se->shared_se.
Then geni_se_resources_off() can bypass pinctrl state based on this flag.
if this is aligning, please confirm so can make the change in V3.
> Konrad
diff mbox series

Patch

diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-se.c
index 2e8f24d5da80..20166c8fc919 100644
--- a/drivers/soc/qcom/qcom-geni-se.c
+++ b/drivers/soc/qcom/qcom-geni-se.c
@@ -1,5 +1,6 @@ 
 // SPDX-License-Identifier: GPL-2.0
 // Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+// Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
 
 /* Disable MMIO tracing to prevent excessive logging of unwanted MMIO traces */
 #define __DISABLE_TRACE_MMIO__
@@ -482,13 +483,14 @@  void geni_se_config_packing(struct geni_se *se, int bpw, int pack_words,
 }
 EXPORT_SYMBOL_GPL(geni_se_config_packing);
 
-static void geni_se_clks_off(struct geni_se *se)
+void geni_se_clks_off(struct geni_se *se)
 {
 	struct geni_wrapper *wrapper = se->wrapper;
 
 	clk_disable_unprepare(se->clk);
 	clk_bulk_disable_unprepare(wrapper->num_clks, wrapper->clks);
 }
+EXPORT_SYMBOL_GPL(geni_se_clks_off);
 
 /**
  * geni_se_resources_off() - Turn off resources associated with the serial
diff --git a/include/linux/soc/qcom/geni-se.h b/include/linux/soc/qcom/geni-se.h
index 0f038a1a0330..caf2c0c4505b 100644
--- a/include/linux/soc/qcom/geni-se.h
+++ b/include/linux/soc/qcom/geni-se.h
@@ -1,6 +1,7 @@ 
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #ifndef _LINUX_QCOM_GENI_SE
@@ -494,6 +495,8 @@  int geni_se_resources_off(struct geni_se *se);
 
 int geni_se_resources_on(struct geni_se *se);
 
+void geni_se_clks_off(struct geni_se *se);
+
 int geni_se_clk_tbl_get(struct geni_se *se, unsigned long **tbl);
 
 int geni_se_clk_freq_match(struct geni_se *se, unsigned long req_freq,