Sean
On 12/11/19 7:45 AM, Sean Nyekjaer wrote:
On 11/12/2019 14.39, Dan Murphy wrote:
Sean
On 12/11/19 7:39 AM, Sean Nyekjaer wrote:
It's a good idea to reset a ip-block/spi device before using it, this
patch will reset the device.
And a generic reset function if needed elsewhere.
Signed-off-by: Sean Nyekjaer <sean@xxxxxxxxxx>
Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
---
Changes since v3:
- added reset if the reset_gpio is not avaliable
Changes since v4:
- added error handling for the SPI I/O
drivers/net/can/m_can/tcan4x5x.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/m_can/tcan4x5x.c
b/drivers/net/can/m_can/tcan4x5x.c
index b6b2feca9e8f..032d110e0870 100644
--- a/drivers/net/can/m_can/tcan4x5x.c
+++ b/drivers/net/can/m_can/tcan4x5x.c
@@ -166,6 +166,27 @@ static void tcan4x5x_check_wake(struct
tcan4x5x_priv *priv)
}
}
+static int tcan4x5x_reset(struct tcan4x5x_priv *priv)
+{
+ int ret = 0;
+
+ if (priv->reset_gpio) {
+ gpiod_set_value(priv->reset_gpio, 1);
+
+ /* tpulse_width minimum 30us */
+ usleep_range(30, 100);
+ gpiod_set_value(priv->reset_gpio, 0);
+ } else {
+ ret = regmap_write(priv->regmap, TCAN4X5X_CONFIG,
TCAN4X5X_SW_RESET);
+ if (ret)
+ return ret;
+ }
+
+ usleep_range(700, 1000);
+
+ return ret;
+}
+
static int regmap_spi_gather_write(void *context, const void *reg,
size_t reg_len, const void *val,
size_t val_len)
@@ -351,6 +372,7 @@ static int tcan4x5x_disable_wake(struct
m_can_classdev *cdev)
static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
{
struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
+ int ret;
tcan4x5x->device_wake_gpio = devm_gpiod_get(cdev->dev,
"device-wake",
GPIOD_OUT_HIGH);
@@ -363,10 +385,13 @@ static int tcan4x5x_parse_config(struct
m_can_classdev *cdev)
tcan4x5x->reset_gpio = devm_gpiod_get_optional(cdev->dev,
"reset",
GPIOD_OUT_LOW);
- if (IS_ERR(tcan4x5x->reset_gpio))
+ if (IS_ERR(tcan4x5x->reset_gpio)) {
tcan4x5x->reset_gpio = NULL;
+ }
Why did you add brackets?
This is not needed for single statement if's
Oh just legacy from V4... V6 then ...
I went back to v4 this was not a change in that version.
Dan