ata: sata_highbank: Convert to use GPIO descriptors
This pure device tree driver is simple to convert to use just GPIO descriptors instead of GPIO numbers. So let's just do it. Cc: Mark Langsdorf <mlangsdo@redhat.com> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
3e216263ce
commit
83a7faace1
|
@ -31,8 +31,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/of_gpio.h>
|
|
||||||
|
|
||||||
#include "ahci.h"
|
#include "ahci.h"
|
||||||
|
|
||||||
|
@ -85,7 +84,7 @@ struct ecx_plat_data {
|
||||||
/* number of extra clocks that the SGPIO PIC controller expects */
|
/* number of extra clocks that the SGPIO PIC controller expects */
|
||||||
u32 pre_clocks;
|
u32 pre_clocks;
|
||||||
u32 post_clocks;
|
u32 post_clocks;
|
||||||
unsigned sgpio_gpio[SGPIO_PINS];
|
struct gpio_desc *sgpio_gpiod[SGPIO_PINS];
|
||||||
u32 sgpio_pattern;
|
u32 sgpio_pattern;
|
||||||
u32 port_to_sgpio[SGPIO_PORTS];
|
u32 port_to_sgpio[SGPIO_PORTS];
|
||||||
};
|
};
|
||||||
|
@ -131,9 +130,9 @@ static void ecx_parse_sgpio(struct ecx_plat_data *pdata, u32 port, u32 state)
|
||||||
*/
|
*/
|
||||||
static void ecx_led_cycle_clock(struct ecx_plat_data *pdata)
|
static void ecx_led_cycle_clock(struct ecx_plat_data *pdata)
|
||||||
{
|
{
|
||||||
gpio_set_value(pdata->sgpio_gpio[SCLOCK], 1);
|
gpiod_set_value(pdata->sgpio_gpiod[SCLOCK], 1);
|
||||||
udelay(50);
|
udelay(50);
|
||||||
gpio_set_value(pdata->sgpio_gpio[SCLOCK], 0);
|
gpiod_set_value(pdata->sgpio_gpiod[SCLOCK], 0);
|
||||||
udelay(50);
|
udelay(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,15 +163,15 @@ static ssize_t ecx_transmit_led_message(struct ata_port *ap, u32 state,
|
||||||
for (i = 0; i < pdata->pre_clocks; i++)
|
for (i = 0; i < pdata->pre_clocks; i++)
|
||||||
ecx_led_cycle_clock(pdata);
|
ecx_led_cycle_clock(pdata);
|
||||||
|
|
||||||
gpio_set_value(pdata->sgpio_gpio[SLOAD], 1);
|
gpiod_set_value(pdata->sgpio_gpiod[SLOAD], 1);
|
||||||
ecx_led_cycle_clock(pdata);
|
ecx_led_cycle_clock(pdata);
|
||||||
gpio_set_value(pdata->sgpio_gpio[SLOAD], 0);
|
gpiod_set_value(pdata->sgpio_gpiod[SLOAD], 0);
|
||||||
/*
|
/*
|
||||||
* bit-bang out the SGPIO pattern, by consuming a bit and then
|
* bit-bang out the SGPIO pattern, by consuming a bit and then
|
||||||
* clocking it out.
|
* clocking it out.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < (SGPIO_SIGNALS * pdata->n_ports); i++) {
|
for (i = 0; i < (SGPIO_SIGNALS * pdata->n_ports); i++) {
|
||||||
gpio_set_value(pdata->sgpio_gpio[SDATA], sgpio_out & 1);
|
gpiod_set_value(pdata->sgpio_gpiod[SDATA], sgpio_out & 1);
|
||||||
sgpio_out >>= 1;
|
sgpio_out >>= 1;
|
||||||
ecx_led_cycle_clock(pdata);
|
ecx_led_cycle_clock(pdata);
|
||||||
}
|
}
|
||||||
|
@ -193,21 +192,19 @@ static void highbank_set_em_messages(struct device *dev,
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct ecx_plat_data *pdata = hpriv->plat_data;
|
struct ecx_plat_data *pdata = hpriv->plat_data;
|
||||||
int i;
|
int i;
|
||||||
int err;
|
|
||||||
|
|
||||||
for (i = 0; i < SGPIO_PINS; i++) {
|
for (i = 0; i < SGPIO_PINS; i++) {
|
||||||
err = of_get_named_gpio(np, "calxeda,sgpio-gpio", i);
|
struct gpio_desc *gpiod;
|
||||||
if (err < 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pdata->sgpio_gpio[i] = err;
|
gpiod = devm_gpiod_get_index(dev, "calxeda,sgpio", i,
|
||||||
err = gpio_request(pdata->sgpio_gpio[i], "CX SGPIO");
|
GPIOD_OUT_HIGH);
|
||||||
if (err) {
|
if (IS_ERR(gpiod)) {
|
||||||
pr_err("sata_highbank gpio_request %d failed: %d\n",
|
dev_err(dev, "failed to get GPIO %d\n", i);
|
||||||
i, err);
|
continue;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
gpio_direction_output(pdata->sgpio_gpio[i], 1);
|
gpiod_set_consumer_name(gpiod, "CX SGPIO");
|
||||||
|
|
||||||
|
pdata->sgpio_gpiod[i] = gpiod;
|
||||||
}
|
}
|
||||||
of_property_read_u32_array(np, "calxeda,led-order",
|
of_property_read_u32_array(np, "calxeda,led-order",
|
||||||
pdata->port_to_sgpio,
|
pdata->port_to_sgpio,
|
||||||
|
|
Loading…
Reference in New Issue