net: phy: spi_ks8895: switch to using gpiod API
This patch switches the driver away from legacy gpio/of_gpio API to gpiod API, and removes use of of_get_named_gpio_flags() which I want to make private to gpiolib. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20220906204922.3789922-3-dmitry.torokhov@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
7b77bb5c81
commit
006534ec28
@ -17,7 +17,6 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
@ -137,15 +136,10 @@ static const struct ks8995_chip_params ks8995_chip[] = {
|
||||
},
|
||||
};
|
||||
|
||||
struct ks8995_pdata {
|
||||
int reset_gpio;
|
||||
enum of_gpio_flags reset_gpio_flags;
|
||||
};
|
||||
|
||||
struct ks8995_switch {
|
||||
struct spi_device *spi;
|
||||
struct mutex lock;
|
||||
struct ks8995_pdata *pdata;
|
||||
struct gpio_desc *reset_gpio;
|
||||
struct bin_attribute regs_attr;
|
||||
const struct ks8995_chip_params *chip;
|
||||
int revision_id;
|
||||
@ -401,24 +395,6 @@ err_out:
|
||||
return err;
|
||||
}
|
||||
|
||||
/* ks8995_parse_dt - setup platform data from devicetree
|
||||
* @ks: pointer to switch instance
|
||||
*
|
||||
* Parses supported DT properties and sets up platform data
|
||||
* accordingly.
|
||||
*/
|
||||
static void ks8995_parse_dt(struct ks8995_switch *ks)
|
||||
{
|
||||
struct device_node *np = ks->spi->dev.of_node;
|
||||
struct ks8995_pdata *pdata = ks->pdata;
|
||||
|
||||
if (!np)
|
||||
return;
|
||||
|
||||
pdata->reset_gpio = of_get_named_gpio_flags(np, "reset-gpios", 0,
|
||||
&pdata->reset_gpio_flags);
|
||||
}
|
||||
|
||||
static const struct bin_attribute ks8995_registers_attr = {
|
||||
.attr = {
|
||||
.name = "registers",
|
||||
@ -449,38 +425,22 @@ static int ks8995_probe(struct spi_device *spi)
|
||||
ks->spi = spi;
|
||||
ks->chip = &ks8995_chip[variant];
|
||||
|
||||
if (ks->spi->dev.of_node) {
|
||||
ks->pdata = devm_kzalloc(&spi->dev, sizeof(*ks->pdata),
|
||||
GFP_KERNEL);
|
||||
if (!ks->pdata)
|
||||
return -ENOMEM;
|
||||
|
||||
ks->pdata->reset_gpio = -1;
|
||||
|
||||
ks8995_parse_dt(ks);
|
||||
ks->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset",
|
||||
GPIOD_OUT_HIGH);
|
||||
err = PTR_ERR_OR_ZERO(ks->reset_gpio);
|
||||
if (err) {
|
||||
dev_err(&spi->dev,
|
||||
"failed to get reset gpio: %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!ks->pdata)
|
||||
ks->pdata = spi->dev.platform_data;
|
||||
err = gpiod_set_consumer_name(ks->reset_gpio, "switch-reset");
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* de-assert switch reset */
|
||||
if (ks->pdata && gpio_is_valid(ks->pdata->reset_gpio)) {
|
||||
unsigned long flags;
|
||||
|
||||
flags = (ks->pdata->reset_gpio_flags == OF_GPIO_ACTIVE_LOW ?
|
||||
GPIOF_ACTIVE_LOW : 0);
|
||||
|
||||
err = devm_gpio_request_one(&spi->dev,
|
||||
ks->pdata->reset_gpio,
|
||||
flags, "switch-reset");
|
||||
if (err) {
|
||||
dev_err(&spi->dev,
|
||||
"failed to get reset-gpios: %d\n", err);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
gpiod_set_value(gpio_to_desc(ks->pdata->reset_gpio), 0);
|
||||
}
|
||||
/* FIXME: this likely requires a delay */
|
||||
gpiod_set_value_cansleep(ks->reset_gpio, 0);
|
||||
|
||||
spi_set_drvdata(spi, ks);
|
||||
|
||||
@ -524,8 +484,7 @@ static void ks8995_remove(struct spi_device *spi)
|
||||
sysfs_remove_bin_file(&spi->dev.kobj, &ks->regs_attr);
|
||||
|
||||
/* assert reset */
|
||||
if (ks->pdata && gpio_is_valid(ks->pdata->reset_gpio))
|
||||
gpiod_set_value(gpio_to_desc(ks->pdata->reset_gpio), 1);
|
||||
gpiod_set_value_cansleep(ks->reset_gpio, 1);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user