spi: tegra124-slave: Drop legacy GPIO support

Since Linux v6.3, legacy GPIO support has been dropped from the Linux
kernel and the gpiod_xxx functions have been supported for a long time
going back to Linux v3.x kernels. Therefore, drop support for the legacy
GPIO functions.

This is beneficial for working with 3rd party Linux kernels that may
have back-ported upstream changes into their kernel and so the kernel
version checks do not work.

Bug 4119327

Change-Id: Ib84e70b27645032108b2c25ce5d4ea3977f6cae1
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2993098
Reviewed-by: Vishwaroop A <va@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Jon Hunter
2023-10-06 14:05:09 +01:00
committed by mobile promotions
parent 413055df75
commit 4b3511a749

View File

@@ -256,11 +256,7 @@ struct tegra_spi_platform_data {
u8 def_chip_select; u8 def_chip_select;
int rx_trig_words; int rx_trig_words;
int ls_bit; int ls_bit;
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
int gpio_slave_ready;
#else
struct gpio_desc *gpio_slave_ready; struct gpio_desc *gpio_slave_ready;
#endif
bool slave_ready_active_high; bool slave_ready_active_high;
int max_dma_buffer_size; int max_dma_buffer_size;
const char *clk_pin; const char *clk_pin;
@@ -314,11 +310,7 @@ struct tegra_spi_data {
bool variable_length_transfer; bool variable_length_transfer;
/* Slave Ready Polarity (true: Active High, false: Active Low) */ /* Slave Ready Polarity (true: Active High, false: Active Low) */
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
int gpio_slave_ready;
#else
struct gpio_desc *gpio_slave_ready; struct gpio_desc *gpio_slave_ready;
#endif
bool slave_ready_active_high; bool slave_ready_active_high;
struct completion rx_dma_complete; struct completion rx_dma_complete;
@@ -815,13 +807,8 @@ static inline void tegra_spi_slave_busy(struct tegra_spi_data *tspi)
deassert_val = 1; deassert_val = 1;
/* Deassert ready line to indicate Busy */ /* Deassert ready line to indicate Busy */
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
if (gpio_is_valid(tspi->gpio_slave_ready))
gpio_set_value(tspi->gpio_slave_ready, deassert_val);
#else
if (tspi->gpio_slave_ready) if (tspi->gpio_slave_ready)
gpiod_set_value(tspi->gpio_slave_ready, deassert_val); gpiod_set_value(tspi->gpio_slave_ready, deassert_val);
#endif
} }
static inline void tegra_spi_slave_ready(struct tegra_spi_data *tspi) static inline void tegra_spi_slave_ready(struct tegra_spi_data *tspi)
@@ -834,13 +821,8 @@ static inline void tegra_spi_slave_ready(struct tegra_spi_data *tspi)
assert_val = 0; assert_val = 0;
/* Assert ready line to indicate Ready */ /* Assert ready line to indicate Ready */
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
if (gpio_is_valid(tspi->gpio_slave_ready))
gpio_set_value(tspi->gpio_slave_ready, assert_val);
#else
if (tspi->gpio_slave_ready) if (tspi->gpio_slave_ready)
gpiod_set_value(tspi->gpio_slave_ready, assert_val); gpiod_set_value(tspi->gpio_slave_ready, assert_val);
#endif
} }
static inline int tegra_spi_ext_clk_enable(bool enable, static inline int tegra_spi_ext_clk_enable(bool enable,
@@ -1896,9 +1878,6 @@ static struct tegra_spi_platform_data
struct tegra_spi_platform_data *pdata; struct tegra_spi_platform_data *pdata;
const __be32 *prop; const __be32 *prop;
struct device_node *np = pdev->dev.of_node; struct device_node *np = pdev->dev.of_node;
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
enum of_gpio_flags gpio_flags;
#endif
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
if (!pdata) if (!pdata)
@@ -1915,7 +1894,6 @@ static struct tegra_spi_platform_data
if (of_find_property(np, "nvidia,clock-always-on", NULL)) if (of_find_property(np, "nvidia,clock-always-on", NULL))
pdata->is_clkon_always = true; pdata->is_clkon_always = true;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 3, 0)
pdata->gpio_slave_ready = pdata->gpio_slave_ready =
devm_gpiod_get_optional(&pdev->dev, "nvidia,slave-ready-gpio", 0); devm_gpiod_get_optional(&pdev->dev, "nvidia,slave-ready-gpio", 0);
@@ -1923,16 +1901,7 @@ static struct tegra_spi_platform_data
pdata->slave_ready_active_high = false; pdata->slave_ready_active_high = false;
else else
pdata->slave_ready_active_high = true; pdata->slave_ready_active_high = true;
#else
pdata->gpio_slave_ready =
of_get_named_gpio_flags(np, "nvidia,slave-ready-gpio", 0,
&gpio_flags);
if (gpio_flags & OF_GPIO_ACTIVE_LOW)
pdata->slave_ready_active_high = false;
else
pdata->slave_ready_active_high = true;
#endif
return pdata; return pdata;
} }
@@ -2040,13 +2009,8 @@ static int tegra_spi_probe(struct platform_device *pdev)
tspi->chip_data = chip_data; tspi->chip_data = chip_data;
tspi->gpio_slave_ready = pdata->gpio_slave_ready; tspi->gpio_slave_ready = pdata->gpio_slave_ready;
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
if (gpio_is_valid(tspi->gpio_slave_ready))
if (gpio_cansleep(tspi->gpio_slave_ready)) {
#else
if (tspi->gpio_slave_ready) if (tspi->gpio_slave_ready)
if (gpiod_cansleep(tspi->gpio_slave_ready)) { if (gpiod_cansleep(tspi->gpio_slave_ready)) {
#endif
dev_err(&pdev->dev, dev_err(&pdev->dev,
"Slave Ready GPIO is unusable as it can sleep\n"); "Slave Ready GPIO is unusable as it can sleep\n");
ret = -EINVAL; ret = -EINVAL;
@@ -2055,28 +2019,12 @@ static int tegra_spi_probe(struct platform_device *pdev)
tspi->slave_ready_active_high = pdata->slave_ready_active_high; tspi->slave_ready_active_high = pdata->slave_ready_active_high;
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
if (gpio_is_valid(tspi->gpio_slave_ready)) {
ret = devm_gpio_request(&pdev->dev,
tspi->gpio_slave_ready, "gpio-spi-slave-ready");
if (ret) {
dev_err(&pdev->dev, "Slave Ready GPIO %d is busy\n",
tspi->gpio_slave_ready);
goto exit_free_master;
}
}
#endif
if (tspi->slave_ready_active_high) if (tspi->slave_ready_active_high)
deassert_val = 0; deassert_val = 0;
else else
deassert_val = 1; deassert_val = 1;
#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 3, 0)
gpio_direction_output(tspi->gpio_slave_ready, deassert_val);
#else
gpiod_direction_output(tspi->gpio_slave_ready, deassert_val); gpiod_direction_output(tspi->gpio_slave_ready, deassert_val);
#endif
spin_lock_init(&tspi->lock); spin_lock_init(&tspi->lock);