From: Stephan Gerhold <stephan@gerhold.net> Date: 2021-05-19 09:19:19
On some systems, S3FWRN5 depends on having an external clock enabled
to function correctly. Allow declaring that clock in the device tree.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
Changes in v2: Minor change in commit message only
v1: https://lore.kernel.org/netdev/20210518133935.571298-1-stephan@gerhold.net/
---
.../devicetree/bindings/net/nfc/samsung,s3fwrn5.yaml | 5 +++++
1 file changed, 5 insertions(+)
From: Stephan Gerhold <stephan@gerhold.net> Date: 2021-05-19 09:19:22
S3FWRN5 depends on a clock input ("XI" pin) to function properly.
Depending on the hardware configuration this could be an always-on
oscillator or some external clock that must be explicitly enabled.
So far we assumed that the clock is always-on.
Make the driver request an (optional) clock from the device tree
and make sure the clock is running before starting S3FWRN5.
Note: S3FWRN5 asserts "GPIO2" whenever it needs the clock input to
function correctly. On some hardware configurations, GPIO2 is
connected directly to an input pin of the external clock provider
(e.g. the main PMIC of the SoC). In that case, it can automatically
AND the clock enable bit and clock request from S3FWRN5 so that
the clock is actually only enabled when needed.
It is also conceivable that on some other hardware configuration
S3FWRN5's GPIO2 might be connected as a regular GPIO input
of the SoC. In that case, follow-up patches could extend the
driver to request the GPIO, set up an interrupt and only enable
the clock when requested by S3FWRN5.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
This allows NFC to work properly on the Samsung Galaxy A3/A5 (2015).
Changes in v2: Rewrite commit message and comment based on discussion
Note: I tried to explain the setup a bit better but dropped most of
the explanations about the exact configuration on the Samsung
Galaxy A5. I think the HW-specific details were more confusing
than helping. :)
v1: https://lore.kernel.org/netdev/20210518133935.571298-2-stephan@gerhold.net/
---
drivers/nfc/s3fwrn5/i2c.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
@@ -207,17 +209,40 @@ static int s3fwrn5_i2c_probe(struct i2c_client *client,if(ret<0)returnret;+phy->clk=devm_clk_get_optional(&client->dev,NULL);+if(IS_ERR(phy->clk))+returndev_err_probe(&client->dev,PTR_ERR(phy->clk),+"failed to get clock\n");++/*+*S3FWRN5dependsonaclockinput("XI"pin)tofunctionproperly.+*Dependingonthehardwareconfigurationthiscouldbeanalways-on+*oscillatororsomeexternalclockthatmustbeexplicitlyenabled.+*MakesuretheclockisrunningbeforestartingS3FWRN5.+*/+ret=clk_prepare_enable(phy->clk);+if(ret<0){+dev_err(&client->dev,"failed to enable clock: %d\n",ret);+returnret;+}+ret=s3fwrn5_probe(&phy->common.ndev,phy,&phy->i2c_dev->dev,&i2c_phy_ops);if(ret<0)-returnret;+gotodisable_clk;ret=devm_request_threaded_irq(&client->dev,phy->i2c_dev->irq,NULL,s3fwrn5_i2c_irq_thread_fn,IRQF_ONESHOT,S3FWRN5_I2C_DRIVER_NAME,phy);if(ret)-s3fwrn5_remove(phy->common.ndev);+gotos3fwrn5_remove;+return0;++s3fwrn5_remove:+s3fwrn5_remove(phy->common.ndev);+disable_clk:+clk_disable_unprepare(phy->clk);returnret;}
@@ -226,6 +251,7 @@ static int s3fwrn5_i2c_remove(struct i2c_client *client)structs3fwrn5_i2c_phy*phy=i2c_get_clientdata(client);s3fwrn5_remove(phy->common.ndev);+clk_disable_unprepare(phy->clk);return0;}
From: Krzysztof Kozlowski <hidden> Date: 2021-05-19 15:59:40
On 19/05/2021 05:16, Stephan Gerhold wrote:
On some systems, S3FWRN5 depends on having an external clock enabled
to function correctly. Allow declaring that clock in the device tree.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
Changes in v2: Minor change in commit message only
v1: https://lore.kernel.org/netdev/20210518133935.571298-1-stephan@gerhold.net/
---
.../devicetree/bindings/net/nfc/samsung,s3fwrn5.yaml | 5 +++++
1 file changed, 5 insertions(+)
Reviewed-by: Krzysztof Kozlowski <redacted>
Best regards,
Krzysztof
From: Krzysztof Kozlowski <hidden> Date: 2021-05-19 16:13:28
On 19/05/2021 05:16, Stephan Gerhold wrote:
S3FWRN5 depends on a clock input ("XI" pin) to function properly.
Depending on the hardware configuration this could be an always-on
oscillator or some external clock that must be explicitly enabled.
So far we assumed that the clock is always-on.
Make the driver request an (optional) clock from the device tree
and make sure the clock is running before starting S3FWRN5.
Note: S3FWRN5 asserts "GPIO2" whenever it needs the clock input to
function correctly. On some hardware configurations, GPIO2 is
connected directly to an input pin of the external clock provider
(e.g. the main PMIC of the SoC). In that case, it can automatically
AND the clock enable bit and clock request from S3FWRN5 so that
the clock is actually only enabled when needed.
It is also conceivable that on some other hardware configuration
S3FWRN5's GPIO2 might be connected as a regular GPIO input
of the SoC. In that case, follow-up patches could extend the
driver to request the GPIO, set up an interrupt and only enable
the clock when requested by S3FWRN5.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
This allows NFC to work properly on the Samsung Galaxy A3/A5 (2015).
Changes in v2: Rewrite commit message and comment based on discussion
Note: I tried to explain the setup a bit better but dropped most of
the explanations about the exact configuration on the Samsung
Galaxy A5. I think the HW-specific details were more confusing
than helping. :)
v1: https://lore.kernel.org/netdev/20210518133935.571298-2-stephan@gerhold.net/
---
drivers/nfc/s3fwrn5/i2c.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
Reviewed-by: Krzysztof Kozlowski <redacted>
Best regards,
Krzysztof
Hello:
This series was applied to netdev/net-next.git (refs/heads/master):
On Wed, 19 May 2021 11:16:12 +0200 you wrote:
On some systems, S3FWRN5 depends on having an external clock enabled
to function correctly. Allow declaring that clock in the device tree.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
Changes in v2: Minor change in commit message only
v1: https://lore.kernel.org/netdev/20210518133935.571298-1-stephan@gerhold.net/
[...]