aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-01-15 13:18:03 -0500
committerDavid S. Miller <davem@davemloft.net>2018-01-15 13:18:03 -0500
commit2c76b34898e5a202f0acbbfb6a228539eb1de9a9 (patch)
treeb96ea4095123b0eb4dd2cee6dcf1dade21473ef9
parent9f239fe6a6b9c47b860a577e7334e43464ab7f9e (diff)
parentf16891326c1c6e6b0f17f60cb6921a145a13e017 (diff)
Merge branch 'dsa-lan9303-check-error-value-from-devm_gpiod_get_optional'
Phil Reid says: ==================== net: dsa: lan9303: check error value from devm_gpiod_get_optional() Errors need to be prograted back from probe. Note: I have only compile tested the code as I don't have the hardware. Egil Hjelmeland <privat@egil-hjelmeland.no> has tested it but I haven't added at Test-by: wasn't in the standard form. Not sure if that's ok or not. Changes from v1: - rebased on net-next ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/dsa/lan9303-core.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/net/dsa/lan9303-core.c b/drivers/net/dsa/lan9303-core.c
index 2dead7fa1f93..6171c0853ff1 100644
--- a/drivers/net/dsa/lan9303-core.c
+++ b/drivers/net/dsa/lan9303-core.c
@@ -817,18 +817,16 @@ static void lan9303_bridge_ports(struct lan9303 *chip)
817 lan9303_alr_add_port(chip, eth_stp_addr, 0, true); 817 lan9303_alr_add_port(chip, eth_stp_addr, 0, true);
818} 818}
819 819
820static int lan9303_handle_reset(struct lan9303 *chip) 820static void lan9303_handle_reset(struct lan9303 *chip)
821{ 821{
822 if (!chip->reset_gpio) 822 if (!chip->reset_gpio)
823 return 0; 823 return;
824 824
825 if (chip->reset_duration != 0) 825 if (chip->reset_duration != 0)
826 msleep(chip->reset_duration); 826 msleep(chip->reset_duration);
827 827
828 /* release (deassert) reset and activate the device */ 828 /* release (deassert) reset and activate the device */
829 gpiod_set_value_cansleep(chip->reset_gpio, 0); 829 gpiod_set_value_cansleep(chip->reset_gpio, 0);
830
831 return 0;
832} 830}
833 831
834/* stop processing packets for all ports */ 832/* stop processing packets for all ports */
@@ -1294,15 +1292,17 @@ static int lan9303_register_switch(struct lan9303 *chip)
1294 return dsa_register_switch(chip->ds); 1292 return dsa_register_switch(chip->ds);
1295} 1293}
1296 1294
1297static void lan9303_probe_reset_gpio(struct lan9303 *chip, 1295static int lan9303_probe_reset_gpio(struct lan9303 *chip,
1298 struct device_node *np) 1296 struct device_node *np)
1299{ 1297{
1300 chip->reset_gpio = devm_gpiod_get_optional(chip->dev, "reset", 1298 chip->reset_gpio = devm_gpiod_get_optional(chip->dev, "reset",
1301 GPIOD_OUT_LOW); 1299 GPIOD_OUT_LOW);
1300 if (IS_ERR(chip->reset_gpio))
1301 return PTR_ERR(chip->reset_gpio);
1302 1302
1303 if (IS_ERR(chip->reset_gpio)) { 1303 if (!chip->reset_gpio) {
1304 dev_dbg(chip->dev, "No reset GPIO defined\n"); 1304 dev_dbg(chip->dev, "No reset GPIO defined\n");
1305 return; 1305 return 0;
1306 } 1306 }
1307 1307
1308 chip->reset_duration = 200; 1308 chip->reset_duration = 200;
@@ -1317,6 +1317,8 @@ static void lan9303_probe_reset_gpio(struct lan9303 *chip,
1317 /* A sane reset duration should not be longer than 1s */ 1317 /* A sane reset duration should not be longer than 1s */
1318 if (chip->reset_duration > 1000) 1318 if (chip->reset_duration > 1000)
1319 chip->reset_duration = 1000; 1319 chip->reset_duration = 1000;
1320
1321 return 0;
1320} 1322}
1321 1323
1322int lan9303_probe(struct lan9303 *chip, struct device_node *np) 1324int lan9303_probe(struct lan9303 *chip, struct device_node *np)
@@ -1326,12 +1328,12 @@ int lan9303_probe(struct lan9303 *chip, struct device_node *np)
1326 mutex_init(&chip->indirect_mutex); 1328 mutex_init(&chip->indirect_mutex);
1327 mutex_init(&chip->alr_mutex); 1329 mutex_init(&chip->alr_mutex);
1328 1330
1329 lan9303_probe_reset_gpio(chip, np); 1331 ret = lan9303_probe_reset_gpio(chip, np);
1330
1331 ret = lan9303_handle_reset(chip);
1332 if (ret) 1332 if (ret)
1333 return ret; 1333 return ret;
1334 1334
1335 lan9303_handle_reset(chip);
1336
1335 ret = lan9303_check_device(chip); 1337 ret = lan9303_check_device(chip);
1336 if (ret) 1338 if (ret)
1337 return ret; 1339 return ret;