ar71xx: use gpio_set_value_cansleep on sleeping GPIOs in ath79_spi
SVN-Revision: 32736
This commit is contained in:
parent
4f66299903
commit
c7fa38484c
2 changed files with 15 additions and 12 deletions
|
@ -178,7 +178,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
if (is_active) {
|
if (is_active) {
|
||||||
/* set initial clock polarity */
|
/* set initial clock polarity */
|
||||||
@@ -80,20 +83,21 @@ static void ath79_spi_chipselect(struct
|
@@ -80,20 +83,24 @@ static void ath79_spi_chipselect(struct
|
||||||
ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
|
ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,13 +203,16 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
|
|
||||||
+ case ATH79_SPI_CS_TYPE_GPIO:
|
+ case ATH79_SPI_CS_TYPE_GPIO:
|
||||||
+ /* SPI is normally active-low */
|
+ /* SPI is normally active-low */
|
||||||
+ gpio_set_value(cdata->cs_line, cs_high);
|
+ if (gpio_cansleep(cdata->cs_line))
|
||||||
|
+ gpio_set_value_cansleep(cdata->cs_line, cs_high);
|
||||||
|
+ else
|
||||||
|
+ gpio_set_value(cdata->cs_line, cs_high);
|
||||||
+ break;
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath79_spi_enable(struct ath79_spi *sp)
|
static void ath79_spi_enable(struct ath79_spi *sp)
|
||||||
@@ -120,24 +124,30 @@ static void ath79_spi_disable(struct ath
|
@@ -120,24 +127,30 @@ static void ath79_spi_disable(struct ath
|
||||||
static int ath79_spi_setup_cs(struct spi_device *spi)
|
static int ath79_spi_setup_cs(struct spi_device *spi)
|
||||||
{
|
{
|
||||||
struct ath79_spi_controller_data *cdata;
|
struct ath79_spi_controller_data *cdata;
|
||||||
|
@ -244,7 +247,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@@ -145,9 +155,19 @@ static int ath79_spi_setup_cs(struct spi
|
@@ -145,9 +158,19 @@ static int ath79_spi_setup_cs(struct spi
|
||||||
|
|
||||||
static void ath79_spi_cleanup_cs(struct spi_device *spi)
|
static void ath79_spi_cleanup_cs(struct spi_device *spi)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +270,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,6 +175,9 @@ static int ath79_spi_setup(struct spi_de
|
@@ -155,6 +178,9 @@ static int ath79_spi_setup(struct spi_de
|
||||||
{
|
{
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
|
@ -277,7 +280,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
if (spi->bits_per_word > 32)
|
if (spi->bits_per_word > 32)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@@ -215,6 +238,10 @@ static __devinit int ath79_spi_probe(str
|
@@ -215,6 +241,10 @@ static __devinit int ath79_spi_probe(str
|
||||||
unsigned long rate;
|
unsigned long rate;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -288,7 +291,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||||
master = spi_alloc_master(&pdev->dev, sizeof(*sp));
|
master = spi_alloc_master(&pdev->dev, sizeof(*sp));
|
||||||
if (master == NULL) {
|
if (master == NULL) {
|
||||||
dev_err(&pdev->dev, "failed to allocate spi master\n");
|
dev_err(&pdev->dev, "failed to allocate spi master\n");
|
||||||
@@ -224,17 +251,10 @@ static __devinit int ath79_spi_probe(str
|
@@ -224,17 +254,10 @@ static __devinit int ath79_spi_probe(str
|
||||||
sp = spi_master_get_devdata(master);
|
sp = spi_master_get_devdata(master);
|
||||||
platform_set_drvdata(pdev, sp);
|
platform_set_drvdata(pdev, sp);
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u32 ath79_spi_rr(struct ath79_spi *sp, unsigned reg)
|
static inline u32 ath79_spi_rr(struct ath79_spi *sp, unsigned reg)
|
||||||
@@ -108,9 +118,6 @@ static void ath79_spi_enable(struct ath7
|
@@ -111,9 +121,6 @@ static void ath79_spi_enable(struct ath7
|
||||||
/* save CTRL register */
|
/* save CTRL register */
|
||||||
sp->reg_ctrl = ath79_spi_rr(sp, AR71XX_SPI_REG_CTRL);
|
sp->reg_ctrl = ath79_spi_rr(sp, AR71XX_SPI_REG_CTRL);
|
||||||
sp->ioc_base = ath79_spi_rr(sp, AR71XX_SPI_REG_IOC);
|
sp->ioc_base = ath79_spi_rr(sp, AR71XX_SPI_REG_IOC);
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath79_spi_disable(struct ath79_spi *sp)
|
static void ath79_spi_disable(struct ath79_spi *sp)
|
||||||
@@ -229,6 +236,110 @@ static u32 ath79_spi_txrx_mode0(struct s
|
@@ -232,6 +239,110 @@ static u32 ath79_spi_txrx_mode0(struct s
|
||||||
return ath79_spi_rr(sp, AR71XX_SPI_REG_RDS);
|
return ath79_spi_rr(sp, AR71XX_SPI_REG_RDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
static __devinit int ath79_spi_probe(struct platform_device *pdev)
|
static __devinit int ath79_spi_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
@@ -251,6 +362,8 @@ static __devinit int ath79_spi_probe(str
|
@@ -254,6 +365,8 @@ static __devinit int ath79_spi_probe(str
|
||||||
sp = spi_master_get_devdata(master);
|
sp = spi_master_get_devdata(master);
|
||||||
platform_set_drvdata(pdev, sp);
|
platform_set_drvdata(pdev, sp);
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@
|
||||||
master->setup = ath79_spi_setup;
|
master->setup = ath79_spi_setup;
|
||||||
master->cleanup = ath79_spi_cleanup;
|
master->cleanup = ath79_spi_cleanup;
|
||||||
master->bus_num = pdata->bus_num;
|
master->bus_num = pdata->bus_num;
|
||||||
@@ -259,7 +372,7 @@ static __devinit int ath79_spi_probe(str
|
@@ -262,7 +375,7 @@ static __devinit int ath79_spi_probe(str
|
||||||
sp->bitbang.master = spi_master_get(master);
|
sp->bitbang.master = spi_master_get(master);
|
||||||
sp->bitbang.chipselect = ath79_spi_chipselect;
|
sp->bitbang.chipselect = ath79_spi_chipselect;
|
||||||
sp->bitbang.txrx_word[SPI_MODE_0] = ath79_spi_txrx_mode0;
|
sp->bitbang.txrx_word[SPI_MODE_0] = ath79_spi_txrx_mode0;
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
sp->bitbang.flags = SPI_CS_HIGH;
|
sp->bitbang.flags = SPI_CS_HIGH;
|
||||||
|
|
||||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
@@ -284,7 +397,8 @@ static __devinit int ath79_spi_probe(str
|
@@ -287,7 +400,8 @@ static __devinit int ath79_spi_probe(str
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_clk_put;
|
goto err_clk_put;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue