2019-12-12 16:18:58

by Dan Murphy

[permalink] [raw]
Subject: [PATCH linux-can/testing] can: tcan4x5x: Disable the INH pin device-state GPIO is unavailable

If the device state GPIO is not connected to the host then disable the
INH output from the TCAN device per section 8.3.5 of the data sheet.

Signed-off-by: Dan Murphy <[email protected]>
---
drivers/net/can/m_can/tcan4x5x.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
index b5d2ea0999c1..6a1f242d1876 100644
--- a/drivers/net/can/m_can/tcan4x5x.c
+++ b/drivers/net/can/m_can/tcan4x5x.c
@@ -102,6 +102,7 @@
#define TCAN4X5X_MODE_NORMAL BIT(7)

#define TCAN4X5X_DISABLE_WAKE_MSK (BIT(31) | BIT(30))
+#define TCAN4X5X_DISABLE_INH_MSK BIT(9)

#define TCAN4X5X_SW_RESET BIT(2)

@@ -360,6 +361,15 @@ static int tcan4x5x_disable_wake(struct m_can_classdev *cdev)
TCAN4X5X_DISABLE_WAKE_MSK, 0x00);
}

+static int tcan4x5x_disable_state(struct m_can_classdev *cdev)
+{
+ struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
+
+ return regmap_update_bits(tcan4x5x->regmap, TCAN4X5X_CONFIG,
+ TCAN4X5X_DISABLE_INH_MSK, 0x01);
+
+}
+
static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
{
struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
@@ -383,8 +393,10 @@ static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
"device-state",
GPIOD_IN);
- if (IS_ERR(tcan4x5x->device_state_gpio))
+ if (IS_ERR(tcan4x5x->device_state_gpio)) {
tcan4x5x->device_state_gpio = NULL;
+ tcan4x5x_disable_state(cdev);
+ }

return 0;
}
--
2.23.0


2019-12-29 15:34:19

by Marc Kleine-Budde

[permalink] [raw]
Subject: Re: [PATCH linux-can/testing] can: tcan4x5x: Disable the INH pin device-state GPIO is unavailable

On 12/12/19 5:15 PM, Dan Murphy wrote:
> If the device state GPIO is not connected to the host then disable the
> INH output from the TCAN device per section 8.3.5 of the data sheet.
>
> Signed-off-by: Dan Murphy <[email protected]>
> ---

Applied to linux-can. With some changes...

> drivers/net/can/m_can/tcan4x5x.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
> index b5d2ea0999c1..6a1f242d1876 100644
> --- a/drivers/net/can/m_can/tcan4x5x.c
> +++ b/drivers/net/can/m_can/tcan4x5x.c
> @@ -102,6 +102,7 @@
> #define TCAN4X5X_MODE_NORMAL BIT(7)
>
> #define TCAN4X5X_DISABLE_WAKE_MSK (BIT(31) | BIT(30))
> +#define TCAN4X5X_DISABLE_INH_MSK BIT(9)
>
> #define TCAN4X5X_SW_RESET BIT(2)
>
> @@ -360,6 +361,15 @@ static int tcan4x5x_disable_wake(struct m_can_classdev *cdev)
> TCAN4X5X_DISABLE_WAKE_MSK, 0x00);
> }
>
> +static int tcan4x5x_disable_state(struct m_can_classdev *cdev)
> +{
> + struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
> +
> + return regmap_update_bits(tcan4x5x->regmap, TCAN4X5X_CONFIG,
> + TCAN4X5X_DISABLE_INH_MSK, 0x01);
> +

Removed the stray line while applying.

> +}
> +
> static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
> {
> struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
> @@ -383,8 +393,10 @@ static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
> tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
> "device-state",
> GPIOD_IN);
> - if (IS_ERR(tcan4x5x->device_state_gpio))
> + if (IS_ERR(tcan4x5x->device_state_gpio)) {
> tcan4x5x->device_state_gpio = NULL;
> + tcan4x5x_disable_state(cdev);
> + }
For some reason, this hunk doesn't apply, due to the additional:

>> tcan4x5x->power = devm_regulator_get_optional(cdev->dev,
>> "vsup");

I've applied the patch manually.

>
> return 0;
> }
>

Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |


Attachments:
signature.asc (499.00 B)
OpenPGP digital signature

2019-12-29 16:09:51

by Marc Kleine-Budde

[permalink] [raw]
Subject: Re: [PATCH linux-can/testing] can: tcan4x5x: Disable the INH pin device-state GPIO is unavailable

On 12/29/19 4:32 PM, Marc Kleine-Budde wrote:
> On 12/12/19 5:15 PM, Dan Murphy wrote:
>> static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
>> {
>> struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
>> @@ -383,8 +393,10 @@ static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
>> tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
>> "device-state",
>> GPIOD_IN);
>> - if (IS_ERR(tcan4x5x->device_state_gpio))
>> + if (IS_ERR(tcan4x5x->device_state_gpio)) {
>> tcan4x5x->device_state_gpio = NULL;
>> + tcan4x5x_disable_state(cdev);
>> + }
> For some reason, this hunk doesn't apply, due to the additional:
>
>>> tcan4x5x->power = devm_regulator_get_optional(cdev->dev,
>>> "vsup");

...which was my fault. :) Please have a look at

https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git/log/?h=testing

...if I've collected every m_can related patch.

Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |


Attachments:
signature.asc (499.00 B)
OpenPGP digital signature

2020-01-08 20:52:47

by Dan Murphy

[permalink] [raw]
Subject: Re: [PATCH linux-can/testing] can: tcan4x5x: Disable the INH pin device-state GPIO is unavailable

Marc

On 12/29/19 10:05 AM, Marc Kleine-Budde wrote:
> On 12/29/19 4:32 PM, Marc Kleine-Budde wrote:
>> On 12/12/19 5:15 PM, Dan Murphy wrote:
>>> static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
>>> {
>>> struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
>>> @@ -383,8 +393,10 @@ static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
>>> tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
>>> "device-state",
>>> GPIOD_IN);
>>> - if (IS_ERR(tcan4x5x->device_state_gpio))
>>> + if (IS_ERR(tcan4x5x->device_state_gpio)) {
>>> tcan4x5x->device_state_gpio = NULL;
>>> + tcan4x5x_disable_state(cdev);
>>> + }
>> For some reason, this hunk doesn't apply, due to the additional:
>>
>>>> tcan4x5x->power = devm_regulator_get_optional(cdev->dev,
>>>> "vsup");
> ...which was my fault. :) Please have a look at
>
> https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git/log/?h=testing
>
> ...if I've collected every m_can related patch.

Is this still relevant or have you pulled this in?

It looks good to me.

Dan


2020-01-09 10:17:17

by Marc Kleine-Budde

[permalink] [raw]
Subject: Re: [PATCH linux-can/testing] can: tcan4x5x: Disable the INH pin device-state GPIO is unavailable

On 1/8/20 9:47 PM, Dan Murphy wrote:
>> https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git/log/?h=testing
>>
>> ...if I've collected every m_can related patch.
>
> Is this still relevant or have you pulled this in?

Yes, it's still relevant, because it's upstream in the mean time. If
there are any problems left, we should fix them.

> It looks good to me.

If you find time, please test.

regards,
Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |


Attachments:
signature.asc (499.00 B)
OpenPGP digital signature