Skip to contentSkip to conversation

gpio: bd70528: remove unneeded break

PATCH In review [email protected] 4 participants 9 messages Oct 19, 2020 – Oct 22, 2020 GPIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 gpio: bd70528: remove unneeded break

From: Tom Rix <[email protected]>

A break is not needed if it is preceded by a return

---
 drivers/gpio/gpio-bd70528.c | 3 ---
 1 file changed, 3 deletions(-)
drivers/gpio/gpio-bd70528.c +0 -3
index 45b3da8da336..931e5765fe92 100644
@@ -71,17 +71,14 @@ static int bd70528_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MASK,
 					  BD70528_GPIO_OPEN_DRAIN);
-		break;
 	case PIN_CONFIG_DRIVE_PUSH_PULL:
 		return regmap_update_bits(bdgpio->chip.regmap,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MASK,
 					  BD70528_GPIO_PUSH_PULL);
-		break;
 	case PIN_CONFIG_INPUT_DEBOUNCE:
 		return bd70528_set_debounce(bdgpio, offset,
 					    pinconf_to_config_argument(config));
-		break;
 	default:
 		break;
 	}
Signature · 1 line
2.18.1
Acked-by on v1 1/1
#1 lore raw

Thanks Tom,

Quoted 15 lines · On Mon, 2020-10-19 at 12:33 -0700, [email protected] wrote:

From: Tom Rix <[email protected]>

A break is not needed if it is preceded by a return

---
 drivers/gpio/gpio-bd70528.c | 3 ---
 1 file changed, 3 deletions(-)
drivers/gpio/gpio- renamed from drivers/gpio/gpio-bd70528.c +0 -0

bd70528.c
index 45b3da8da336..931e5765fe92 100644

drivers/gpio/gpio-bd70528.c static int bd70528_gpio_set_config(struct · line 75

Quoted 5 lines
drivers/gpio/gpio-bd70528.c +0 -1
@@ -71,17 +71,14 @@ static int bd70528_gpio_set_config(struct
 gpio_chip *chip, unsigned int offset,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MASK,
 					  BD70528_GPIO_OPEN_DRAIN);
-		break;

My personal taste is also to omit these breaks but I am pretty sure I saw some tooling issuing a warning about falling through the switch- case back when I wrote this. Most probably checkpatch didn't like that back then. Anyways - if you have no warnings from any of the tools - this indeed looks better (to me) without the break :)

drivers/gpio/gpio-bd70528.c static int bd70528_gpio_set_config(struct gpio_chip *chip, unsigned int offset, · line 82

Quoted 12 lines
drivers/gpio/gpio-bd70528.c +0 -2
 	case PIN_CONFIG_DRIVE_PUSH_PULL:
 		return regmap_update_bits(bdgpio->chip.regmap,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MASK,
 					  BD70528_GPIO_PUSH_PULL);
-		break;
 	case PIN_CONFIG_INPUT_DEBOUNCE:
 		return bd70528_set_debounce(bdgpio, offset,
 					    pinconf_to_config_argument(
 config));
-		break;
 	default:

Actually - my personal taste would be to also get rid of the empty default here - but I guess it was also added to make some tool happy...

drivers/gpio/gpio-bd70528.c

Quoted 2 lines
drivers/gpio/gpio-bd70528.c +0 -0
 		break;
 	}
#2 lore raw
Quoted 8 lines · Matti
Quoted 1 line · On Mon, 2020-10-19 at 12:33 -0700, [email protected] wrote:

- break;

My personal taste is also to omit these breaks but I am pretty sure I saw some tooling issuing a warning about falling through the switch- case back when I wrote this. Most probably checkpatch didn't like that back then. Anyways - if you have no warnings from any of the tools - this indeed looks better (to me) without the break :)

JFYI: it's a clang which actually *is* complaining for an extra break.

Signature · 2 lines
With Best Regards,
Andy Shevchenko
#3 lore raw
Quoted 14 lines · Andy Shevchenko
Quoted 11 lines · Matti
Quoted 1 line · On Mon, 2020-10-19 at 12:33 -0700, [email protected] wrote:

- break;

My personal taste is also to omit these breaks but I am pretty sure I
saw some tooling issuing a warning about falling through the switch-
case back when I wrote this. Most probably checkpatch didn't like that
back then. Anyways - if you have no warnings from any of the tools -
this indeed looks better (to me) without the break :)

Quoted 3 lines

JFYI: it's a clang which actually *is* complaining for an extra break.

Oh. I just replied before seeing this. So actually, checkpatch complains about missing break and clang about existing break. I'm getting much more nagging at work than at home!

Best Regards
Matti

#4 lore raw
In reply to Vaittinen, Matti
Quoted 12 lines · Matti Vaittinen

Thanks Tom,

Quoted 9 lines · On Mon, 2020-10-19 at 12:33 -0700, [email protected] wrote:

From: Tom Rix <[email protected]>

A break is not needed if it is preceded by a return

---
 drivers/gpio/gpio-bd70528.c | 3 ---
 1 file changed, 3 deletions(-)
Quoted 16 lines

drivers/gpio/gpio-bd70528.c static int bd70528_gpio_set_config(struct · line 75

Quoted 11 lines
drivers/gpio/gpio- renamed from drivers/gpio/gpio-bd70528.c +0 -0

bd70528.c
index 45b3da8da336..931e5765fe92 100644

drivers/gpio/gpio-bd70528.c +0 -1
@@ -71,17 +71,14 @@ static int bd70528_gpio_set_config(struct
 gpio_chip *chip, unsigned int offset,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MASK,
 					  BD70528_GPIO_OPEN_DRAIN);
-		break;

My personal taste is also to omit these breaks but I am pretty sure I saw some tooling issuing a warning about falling through the switch- case back when I wrote this. Most probably checkpatch didn't like that
back then.

I did a test and removed the breaks. Then I copied the modified file to drivers/gpio/dummy.c
Next I committed this dummy.c in git, ran git-format-patch -s and finally ran the checkpatch on this... Following was produced:

[mvaittin@localhost linux]$ scripts/checkpatch.pl 0001-gpio-add- dummy.patch
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ImportError: No module named ply
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#15:
new file mode 100644

WARNING: Possible switch case/default not preceded by break or fallthrough comment
#91: FILE: drivers/gpio/dummy.c:72:
+ case PIN_CONFIG_DRIVE_PUSH_PULL:

WARNING: Possible switch case/default not preceded by break or fallthrough comment
#96: FILE: drivers/gpio/dummy.c:77:
+ case PIN_CONFIG_INPUT_DEBOUNCE:

total: 0 errors, 3 warnings, 229 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-
inplace.

0001-gpio-add-dummy.patch has style problems, please review.

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.

I guess that explains the odd "fallthrough" comments you mentioned in another email. I guess the checkpatch should be fixed before you put too much effort in clean-up...

And for peeps who have not been following - following function triggers the checkpatch error above:

static int bd70528_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
unsigned long config)

{
	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);

	switch (pinconf_to_config_param(config)) {
	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
		return regmap_update_bits(bdgpio->chip.regmap,
					  GPIO_OUT_REG(offset),
					  BD70528_GPIO_DRIVE_MASK,
					  BD70528_GPIO_OPEN_DRAIN);
	case PIN_CONFIG_DRIVE_PUSH_PULL:
		return regmap_update_bits(bdgpio->chip.regmap,
					  GPIO_OUT_REG(offset),
					  BD70528_GPIO_DRIVE_MASK,
					  BD70528_GPIO_PUSH_PULL);
	case PIN_CONFIG_INPUT_DEBOUNCE:
		return bd70528_set_debounce(bdgpio, offset,
					    pinconf_to_config_argument(
config));
	default:
		break;
	}
	return -ENOTSUPP;
}

Best Regards
Matti Vaittinen

#5 lore raw
Quoted 68 lines · Matti
Quoted 12 lines · Matti Vaittinen

Thanks Tom,

Quoted 9 lines · On Mon, 2020-10-19 at 12:33 -0700, [email protected] wrote:

From: Tom Rix <[email protected]>

A break is not needed if it is preceded by a return

---
 drivers/gpio/gpio-bd70528.c | 3 ---
 1 file changed, 3 deletions(-)
Quoted 16 lines

drivers/gpio/gpio-bd70528.c static int bd70528_gpio_set_config(struct · line 75

Quoted 11 lines
drivers/gpio/gpio- renamed from drivers/gpio/gpio-bd70528.c +0 -0

bd70528.c
index 45b3da8da336..931e5765fe92 100644

drivers/gpio/gpio-bd70528.c +0 -1
@@ -71,17 +71,14 @@ static int bd70528_gpio_set_config(struct
 gpio_chip *chip, unsigned int offset,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MASK,
 					  BD70528_GPIO_OPEN_DRAIN);
-		break;

My personal taste is also to omit these breaks but I am pretty sure I saw some tooling issuing a warning about falling through the switch- case back when I wrote this. Most probably checkpatch didn't like that
back then.

I did a test and removed the breaks. Then I copied the modified file to drivers/gpio/dummy.c
Next I committed this dummy.c in git, ran git-format-patch -s and finally ran the checkpatch on this... Following was produced:

[mvaittin@localhost linux]$ scripts/checkpatch.pl 0001-gpio-add- dummy.patch
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ImportError: No module named ply
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#15:
new file mode 100644

WARNING: Possible switch case/default not preceded by break or fallthrough comment
#91: FILE: drivers/gpio/dummy.c:72:

(quoted diff) +1 -0
+	case PIN_CONFIG_DRIVE_PUSH_PULL:

WARNING: Possible switch case/default not preceded by break or fallthrough comment
#96: FILE: drivers/gpio/dummy.c:77:

(quoted diff) +1 -0
+	case PIN_CONFIG_INPUT_DEBOUNCE:

total: 0 errors, 3 warnings, 229 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-
inplace.

0001-gpio-add-dummy.patch has style problems, please review.

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.

Quoted 7 lines

I guess that explains the odd "fallthrough" comments you mentioned in another email. I guess the checkpatch should be fixed before you put too much effort in clean-up...

And for peeps who have not been following - following function triggers the checkpatch error above:

Huh? what version of checkpatch are you using?
Send it to me please.

Quoted 31 lines

static int bd70528_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
unsigned long config)

{
	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);

	switch (pinconf_to_config_param(config)) {
	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
		return regmap_update_bits(bdgpio->chip.regmap,
					  GPIO_OUT_REG(offset),
					  BD70528_GPIO_DRIVE_MASK,
					  BD70528_GPIO_OPEN_DRAIN);
	case PIN_CONFIG_DRIVE_PUSH_PULL:
		return regmap_update_bits(bdgpio->chip.regmap,
					  GPIO_OUT_REG(offset),
					  BD70528_GPIO_DRIVE_MASK,
					  BD70528_GPIO_PUSH_PULL);
	case PIN_CONFIG_INPUT_DEBOUNCE:
		return bd70528_set_debounce(bdgpio, offset,
					    pinconf_to_config_argument(
config));
	default:
		break;
	}
	return -ENOTSUPP;
}

Best Regards
Matti Vaittinen

#6 lore raw

Hello Joe & All,

Quoted 82 lines · Joe Perches
Quoted 81 lines · Matti
Quoted 24 lines · Matti Vaittinen

Thanks Tom,

Quoted 21 lines · On Mon, 2020-10-19 at 12:33 -0700, [email protected] wrote:

From: Tom Rix <[email protected]>

A break is not needed if it is preceded by a return

---
 drivers/gpio/gpio-bd70528.c | 3 ---
 1 file changed, 3 deletions(-)
drivers/gpio/gpio- renamed from drivers/gpio/gpio-bd70528.c +0 -0

bd70528.c
index 45b3da8da336..931e5765fe92 100644

drivers/gpio/gpio-bd70528.c +0 -0
@@ -71,17 +71,14 @@ static int bd70528_gpio_set_config(struct
 gpio_chip *chip, unsigned int offset,
 					  GPIO_OUT_REG(offset),
 					  BD70528_GPIO_DRIVE_MA
 SK,
 					  BD70528_GPIO_OPEN_DRA
 IN);
Quoted 8 lines

drivers/gpio/gpio-bd70528.c static int bd70528_gpio_set_config(struct · line 77

Quoted 1 line
drivers/gpio/gpio-bd70528.c +0 -1
-		break;

My personal taste is also to omit these breaks but I am pretty sure I
saw some tooling issuing a warning about falling through the switch-
case back when I wrote this. Most probably checkpatch didn't like that
back then.

I did a test and removed the breaks. Then I copied the modified file to
drivers/gpio/dummy.c
Next I committed this dummy.c in git, ran git-format-patch -s and finally ran the checkpatch on this... Following was produced:

[mvaittin@localhost linux]$ scripts/checkpatch.pl 0001-gpio-add- dummy.patch
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ImportError: No module named ply
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#15:
new file mode 100644

WARNING: Possible switch case/default not preceded by break or fallthrough comment
#91: FILE: drivers/gpio/dummy.c:72:

(quoted diff) +1 -0
+	case PIN_CONFIG_DRIVE_PUSH_PULL:

WARNING: Possible switch case/default not preceded by break or fallthrough comment
#96: FILE: drivers/gpio/dummy.c:77:

(quoted diff) +1 -0
+	case PIN_CONFIG_INPUT_DEBOUNCE:

total: 0 errors, 3 warnings, 229 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --
fix-
inplace.

0001-gpio-add-dummy.patch has style problems, please review.

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.

I guess that explains the odd "fallthrough" comments you mentioned in
another email. I guess the checkpatch should be fixed before you put
too much effort in clean-up...

Quoted 6 lines
Quoted 3 lines

And for peeps who have not been following - following function triggers
the checkpatch error above:

Huh? what version of checkpatch are you using?
Send it to me please.

I was actually accidentally running the checkpatch from stable release 5.4 yesterday. I did today run it from my development repo which currently was based on regulator-v5.8. I didn't test the latest versions.

Please find my version of checkpatch and the patch to trigger the warning attached.

Quoted 30 lines
Quoted 30 lines

static int bd70528_gpio_set_config(struct gpio_chip *chip, unsigned int
offset,
unsigned long config)

{
	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);

	switch (pinconf_to_config_param(config)) {
	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
		return regmap_update_bits(bdgpio->chip.regmap,
					  GPIO_OUT_REG(offset),
					  BD70528_GPIO_DRIVE_MASK,
					  BD70528_GPIO_OPEN_DRAIN);
	case PIN_CONFIG_DRIVE_PUSH_PULL:
		return regmap_update_bits(bdgpio->chip.regmap,
					  GPIO_OUT_REG(offset),
					  BD70528_GPIO_DRIVE_MASK,
					  BD70528_GPIO_PUSH_PULL);
	case PIN_CONFIG_INPUT_DEBOUNCE:
		return bd70528_set_debounce(bdgpio, offset,
					    pinconf_to_config_argument(
config));
	default:
		break;
	}
	return -ENOTSUPP;
}
Quoted 3 lines
Quoted 3 lines

Best Regards
Matti Vaittinen

From 5e70eba5d3b0e8e0505378400c417fb4060463c4 Mon Sep 17 00:00:00 2001
From: Matti Vaittinen <[email protected]>
Date: Tue, 20 Oct 2020 14:35:16 +0300
Subject: [PATCH] gpio: add dummy

this description is likely to not make any sense.

---
 drivers/gpio/dummy.c | 229 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 229 insertions(+)
 create mode 100644 drivers/gpio/dummy.c
drivers/gpio/dummy.c new file +229 -0
new file mode 100644
index 000000000000..75c1bae94514
@@ -0,0 +1,229 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2018 ROHM Semiconductors
+// gpio-bd70528.c ROHM BD70528MWV gpio driver
+
+#include <linux/gpio/driver.h>
+#include <linux/mfd/rohm-bd70528.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+#define GPIO_IN_REG(offset) (BD70528_REG_GPIO1_IN + (offset) * 2)
+#define GPIO_OUT_REG(offset) (BD70528_REG_GPIO1_OUT + (offset) * 2)
+
+struct bd70528_gpio {
+	struct rohm_regmap_dev chip;
+	struct gpio_chip gpio;
+};
+
+static int bd70528_set_debounce(struct bd70528_gpio *bdgpio,
+				unsigned int offset, unsigned int debounce)
+{
+	u8 val;
+
+	switch (debounce) {
+	case 0:
+		val = BD70528_DEBOUNCE_DISABLE;
+		break;
+	case 1 ... 15000:
+		val = BD70528_DEBOUNCE_15MS;
+		break;
+	case 15001 ... 30000:
+		val = BD70528_DEBOUNCE_30MS;
+		break;
+	case 30001 ... 50000:
+		val = BD70528_DEBOUNCE_50MS;
+		break;
+	default:
+		dev_err(bdgpio->chip.dev,
+			"Invalid debounce value %u\n", debounce);
+		return -EINVAL;
+	}
+	return regmap_update_bits(bdgpio->chip.regmap, GPIO_IN_REG(offset),
+				 BD70528_DEBOUNCE_MASK, val);
+}
+
+static int bd70528_get_direction(struct gpio_chip *chip, unsigned int offset)
+{
+	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);
+	int val, ret;
+
+	/* Do we need to do something to IRQs here? */
+	ret = regmap_read(bdgpio->chip.regmap, GPIO_OUT_REG(offset), &val);
+	if (ret) {
+		dev_err(bdgpio->chip.dev, "Could not read gpio direction\n");
+		return ret;
+	}
+
+	return !(val & BD70528_GPIO_OUT_EN_MASK);
+}
+
+static int bd70528_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
+				   unsigned long config)
+{
+	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);
+
+	switch (pinconf_to_config_param(config)) {
+	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
+		return regmap_update_bits(bdgpio->chip.regmap,
+					  GPIO_OUT_REG(offset),
+					  BD70528_GPIO_DRIVE_MASK,
+					  BD70528_GPIO_OPEN_DRAIN);
+	case PIN_CONFIG_DRIVE_PUSH_PULL:
+		return regmap_update_bits(bdgpio->chip.regmap,
+					  GPIO_OUT_REG(offset),
+					  BD70528_GPIO_DRIVE_MASK,
+					  BD70528_GPIO_PUSH_PULL);
+	case PIN_CONFIG_INPUT_DEBOUNCE:
+		return bd70528_set_debounce(bdgpio, offset,
+					    pinconf_to_config_argument(config));
+	default:
+		break;
+	}
+	return -ENOTSUPP;
+}
+
+static int bd70528_direction_input(struct gpio_chip *chip, unsigned int offset)
+{
+	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);
+
+	/* Do we need to do something to IRQs here? */
+	return regmap_update_bits(bdgpio->chip.regmap, GPIO_OUT_REG(offset),
+				 BD70528_GPIO_OUT_EN_MASK,
+				 BD70528_GPIO_OUT_DISABLE);
+}
+
+static void bd70528_gpio_set(struct gpio_chip *chip, unsigned int offset,
+			     int value)
+{
+	int ret;
+	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);
+	u8 val = (value) ? BD70528_GPIO_OUT_HI : BD70528_GPIO_OUT_LO;
+
+	ret = regmap_update_bits(bdgpio->chip.regmap, GPIO_OUT_REG(offset),
+				 BD70528_GPIO_OUT_MASK, val);
+	if (ret)
+		dev_err(bdgpio->chip.dev, "Could not set gpio to %d\n", value);
+}
+
+static int bd70528_direction_output(struct gpio_chip *chip, unsigned int offset,
+				    int value)
+{
+	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);
+
+	bd70528_gpio_set(chip, offset, value);
+	return regmap_update_bits(bdgpio->chip.regmap, GPIO_OUT_REG(offset),
+				 BD70528_GPIO_OUT_EN_MASK,
+				 BD70528_GPIO_OUT_ENABLE);
+}
+
+#define GPIO_IN_STATE_MASK(offset) (BD70528_GPIO_IN_STATE_BASE << (offset))
+
+static int bd70528_gpio_get_o(struct bd70528_gpio *bdgpio, unsigned int offset)
+{
+	int ret;
+	unsigned int val;
+
+	ret = regmap_read(bdgpio->chip.regmap, GPIO_OUT_REG(offset), &val);
+	if (!ret)
+		ret = !!(val & BD70528_GPIO_OUT_MASK);
+	else
+		dev_err(bdgpio->chip.dev, "GPIO (out) state read failed\n");
+
+	return ret;
+}
+
+static int bd70528_gpio_get_i(struct bd70528_gpio *bdgpio, unsigned int offset)
+{
+	unsigned int val;
+	int ret;
+
+	ret = regmap_read(bdgpio->chip.regmap, BD70528_REG_GPIO_STATE, &val);
+
+	if (!ret)
+		ret = !(val & GPIO_IN_STATE_MASK(offset));
+	else
+		dev_err(bdgpio->chip.dev, "GPIO (in) state read failed\n");
+
+	return ret;
+}
+
+static int bd70528_gpio_get(struct gpio_chip *chip, unsigned int offset)
+{
+	int ret;
+	struct bd70528_gpio *bdgpio = gpiochip_get_data(chip);
+
+	/*
+	 * There is a race condition where someone might be changing the
+	 * GPIO direction after we get it but before we read the value. But
+	 * application design where GPIO direction may be changed just when
+	 * we read GPIO value would be pointless as reader could not know
+	 * whether the returned high/low state is caused by input or output.
+	 * Or then there must be other ways to mitigate the issue. Thus
+	 * locking would make no sense.
+	 */
+	ret = bd70528_get_direction(chip, offset);
+	if (ret == 0)
+		ret = bd70528_gpio_get_o(bdgpio, offset);
+	else if (ret == 1)
+		ret = bd70528_gpio_get_i(bdgpio, offset);
+	else
+		dev_err(bdgpio->chip.dev, "failed to read GPIO direction\n");
+
+	return ret;
+}
+
+static int bd70528_probe(struct platform_device *pdev)
+{
+	struct bd70528_gpio *bdgpio;
+	struct rohm_regmap_dev *bd70528;
+	int ret;
+
+	bd70528 = dev_get_drvdata(pdev->dev.parent);
+	if (!bd70528) {
+		dev_err(&pdev->dev, "No MFD driver data\n");
+		return -EINVAL;
+	}
+
+	bdgpio = devm_kzalloc(&pdev->dev, sizeof(*bdgpio),
+			      GFP_KERNEL);
+	if (!bdgpio)
+		return -ENOMEM;
+	bdgpio->chip.dev = &pdev->dev;
+	bdgpio->gpio.parent = pdev->dev.parent;
+	bdgpio->gpio.label = "bd70528-gpio";
+	bdgpio->gpio.owner = THIS_MODULE;
+	bdgpio->gpio.get_direction = bd70528_get_direction;
+	bdgpio->gpio.direction_input = bd70528_direction_input;
+	bdgpio->gpio.direction_output = bd70528_direction_output;
+	bdgpio->gpio.set_config = bd70528_gpio_set_config;
+	bdgpio->gpio.can_sleep = true;
+	bdgpio->gpio.get = bd70528_gpio_get;
+	bdgpio->gpio.set = bd70528_gpio_set;
+	bdgpio->gpio.ngpio = 4;
+	bdgpio->gpio.base = -1;
+#ifdef CONFIG_OF_GPIO
+	bdgpio->gpio.of_node = pdev->dev.parent->of_node;
+#endif
+	bdgpio->chip.regmap = bd70528->regmap;
+
+	ret = devm_gpiochip_add_data(&pdev->dev, &bdgpio->gpio,
+				     bdgpio);
+	if (ret)
+		dev_err(&pdev->dev, "gpio_init: Failed to add bd70528-gpio\n");
+
+	return ret;
+}
+
+static struct platform_driver bd70528_gpio = {
+	.driver = {
+		.name = "bd70528-gpio"
+	},
+	.probe = bd70528_probe,
+};
+
+module_platform_driver(bd70528_gpio);
+
+MODULE_AUTHOR("Matti Vaittinen <[email protected]>");
+MODULE_DESCRIPTION("BD70528 voltage regulator driver");
+MODULE_LICENSE("GPL");
Signature · 1 line
2.21.3
#7 lore raw
Quoted 3 lines · Matti

Hello Joe & All,

Quoted 1 line · Joe Perches

On Tue, 2020-10-20 at 11:48 +0000, Vaittinen, Matti wrote:

[]

Quoted 5 lines
Quoted 5 lines
Quoted 2 lines

And for peeps who have not been following - following function triggers the checkpatch error above:

Huh? what version of checkpatch are you using?
Send it to me please.

[]

Quoted 2 lines

Please find my version of checkpatch and the patch to trigger the warning attached.

Thanks. This test wasn't particularly useful
(and had some false positives) and was removed by

commit ef3c005c0eb07a60949191bc6ee407d5f43cc502

Author: Joe Perches <[email protected]>
Date:   Tue Aug 11 18:35:19 2020 -0700

checkpatch: remove missing switch/case break test

This test doesn't work well and newer compilers are much better at emitting this warning.

#8 lore raw

Hello,

Quoted 26 lines · Joe Perches
Quoted 3 lines · Matti

Hello Joe & All,

Quoted 1 line · Joe Perches

On Tue, 2020-10-20 at 11:48 +0000, Vaittinen, Matti wrote:

[]

Quoted 5 lines
Quoted 5 lines
Quoted 2 lines

And for peeps who have not been following - following function triggers the checkpatch error above:

Huh? what version of checkpatch are you using?
Send it to me please.

[]

Quoted 2 lines

Please find my version of checkpatch and the patch to trigger the warning attached.

Thanks. This test wasn't particularly useful
(and had some false positives) and was removed by

commit ef3c005c0eb07a60949191bc6ee407d5f43cc502

Author: Joe Perches <[email protected]>
Date:   Tue Aug 11 18:35:19 2020 -0700

checkpatch: remove missing switch/case break test

This test doesn't work well and newer compilers are much better at emitting this warning.

Quoted 7 lines

Link:
http://lkml.kernel.org/r/[email protected]

Thanks for checking this Joe!
And note to self - always check with newest kernel... ;)

(Sorry for bothering)

Br,
Matti Vaittinen