Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
linux-arm
linux-vs
Commits
b769c5ba
Verified
Commit
b769c5ba
authored
Sep 15, 2019
by
Mark Brown
Browse files
Merge branch 'spi-5.4' into spi-next
parents
262a2f33
fdeae8f5
Changes
74
Hide whitespace changes
Inline
Side-by-side
drivers/spi/spi-sprd-adi.c
View file @
b769c5ba
...
...
@@ -86,6 +86,7 @@
#define BIT_WDG_EN BIT(2)
/* Definition of PMIC reset status register */
#define HWRST_STATUS_SECURITY 0x02
#define HWRST_STATUS_RECOVERY 0x20
#define HWRST_STATUS_NORMAL 0x40
#define HWRST_STATUS_ALARM 0x50
...
...
@@ -97,6 +98,8 @@
#define HWRST_STATUS_AUTODLOADER 0xa0
#define HWRST_STATUS_IQMODE 0xb0
#define HWRST_STATUS_SPRDISK 0xc0
#define HWRST_STATUS_FACTORYTEST 0xe0
#define HWRST_STATUS_WATCHDOG 0xf0
/* Use default timeout 50 ms that converts to watchdog values */
#define WDG_LOAD_VAL ((50 * 1000) / 32768)
...
...
@@ -162,14 +165,16 @@ static int sprd_adi_read(struct sprd_adi *sadi, u32 reg_paddr, u32 *read_val)
int
read_timeout
=
ADI_READ_TIMEOUT
;
unsigned
long
flags
;
u32
val
,
rd_addr
;
int
ret
;
ret
=
hwspin_lock_timeout_irqsave
(
sadi
->
hwlock
,
ADI_HWSPINLOCK_TIMEOUT
,
&
flags
);
if
(
ret
)
{
dev_err
(
sadi
->
dev
,
"get the hw lock failed
\n
"
);
return
ret
;
int
ret
=
0
;
if
(
sadi
->
hwlock
)
{
ret
=
hwspin_lock_timeout_irqsave
(
sadi
->
hwlock
,
ADI_HWSPINLOCK_TIMEOUT
,
&
flags
);
if
(
ret
)
{
dev_err
(
sadi
->
dev
,
"get the hw lock failed
\n
"
);
return
ret
;
}
}
/*
...
...
@@ -216,7 +221,8 @@ static int sprd_adi_read(struct sprd_adi *sadi, u32 reg_paddr, u32 *read_val)
*
read_val
=
val
&
RD_VALUE_MASK
;
out:
hwspin_unlock_irqrestore
(
sadi
->
hwlock
,
&
flags
);
if
(
sadi
->
hwlock
)
hwspin_unlock_irqrestore
(
sadi
->
hwlock
,
&
flags
);
return
ret
;
}
...
...
@@ -227,12 +233,14 @@ static int sprd_adi_write(struct sprd_adi *sadi, u32 reg_paddr, u32 val)
unsigned
long
flags
;
int
ret
;
ret
=
hwspin_lock_timeout_irqsave
(
sadi
->
hwlock
,
ADI_HWSPINLOCK_TIMEOUT
,
&
flags
);
if
(
ret
)
{
dev_err
(
sadi
->
dev
,
"get the hw lock failed
\n
"
);
return
ret
;
if
(
sadi
->
hwlock
)
{
ret
=
hwspin_lock_timeout_irqsave
(
sadi
->
hwlock
,
ADI_HWSPINLOCK_TIMEOUT
,
&
flags
);
if
(
ret
)
{
dev_err
(
sadi
->
dev
,
"get the hw lock failed
\n
"
);
return
ret
;
}
}
ret
=
sprd_adi_drain_fifo
(
sadi
);
...
...
@@ -258,7 +266,8 @@ static int sprd_adi_write(struct sprd_adi *sadi, u32 reg_paddr, u32 val)
}
out:
hwspin_unlock_irqrestore
(
sadi
->
hwlock
,
&
flags
);
if
(
sadi
->
hwlock
)
hwspin_unlock_irqrestore
(
sadi
->
hwlock
,
&
flags
);
return
ret
;
}
...
...
@@ -307,6 +316,18 @@ static int sprd_adi_transfer_one(struct spi_controller *ctlr,
return
0
;
}
static
void
sprd_adi_set_wdt_rst_mode
(
struct
sprd_adi
*
sadi
)
{
#ifdef CONFIG_SPRD_WATCHDOG
u32
val
;
/* Set default watchdog reboot mode */
sprd_adi_read
(
sadi
,
sadi
->
slave_pbase
+
PMIC_RST_STATUS
,
&
val
);
val
|=
HWRST_STATUS_WATCHDOG
;
sprd_adi_write
(
sadi
,
sadi
->
slave_pbase
+
PMIC_RST_STATUS
,
val
);
#endif
}
static
int
sprd_adi_restart_handler
(
struct
notifier_block
*
this
,
unsigned
long
mode
,
void
*
cmd
)
{
...
...
@@ -336,11 +357,16 @@ static int sprd_adi_restart_handler(struct notifier_block *this,
reboot_mode
=
HWRST_STATUS_IQMODE
;
else
if
(
!
strncmp
(
cmd
,
"sprdisk"
,
7
))
reboot_mode
=
HWRST_STATUS_SPRDISK
;
else
if
(
!
strncmp
(
cmd
,
"tospanic"
,
8
))
reboot_mode
=
HWRST_STATUS_SECURITY
;
else
if
(
!
strncmp
(
cmd
,
"factorytest"
,
11
))
reboot_mode
=
HWRST_STATUS_FACTORYTEST
;
else
reboot_mode
=
HWRST_STATUS_NORMAL
;
/* Record the reboot mode */
sprd_adi_read
(
sadi
,
sadi
->
slave_pbase
+
PMIC_RST_STATUS
,
&
val
);
val
&=
~
HWRST_STATUS_WATCHDOG
;
val
|=
reboot_mode
;
sprd_adi_write
(
sadi
,
sadi
->
slave_pbase
+
PMIC_RST_STATUS
,
val
);
...
...
@@ -380,9 +406,6 @@ static void sprd_adi_hw_init(struct sprd_adi *sadi)
const
__be32
*
list
;
u32
tmp
;
/* Address bits select default 12 bits */
writel_relaxed
(
0
,
sadi
->
base
+
REG_ADI_CTRL0
);
/* Set all channels as default priority */
writel_relaxed
(
0
,
sadi
->
base
+
REG_ADI_CHN_PRIL
);
writel_relaxed
(
0
,
sadi
->
base
+
REG_ADI_CHN_PRIH
);
...
...
@@ -459,19 +482,30 @@ static int sprd_adi_probe(struct platform_device *pdev)
sadi
->
slave_pbase
=
res
->
start
+
ADI_SLAVE_OFFSET
;
sadi
->
ctlr
=
ctlr
;
sadi
->
dev
=
&
pdev
->
dev
;
ret
=
of_hwspin_lock_get_id_byname
(
np
,
"adi"
);
if
(
ret
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"can not get the hardware spinlock
\n
"
);
goto
put_ctlr
;
}
sadi
->
hwlock
=
devm_hwspin_lock_request_specific
(
&
pdev
->
dev
,
ret
);
if
(
!
sadi
->
hwlock
)
{
ret
=
-
ENXIO
;
goto
put_ctlr
;
ret
=
of_hwspin_lock_get_id
(
np
,
0
);
if
(
ret
>
0
||
(
IS_ENABLED
(
CONFIG_HWSPINLOCK
)
&&
ret
==
0
))
{
sadi
->
hwlock
=
devm_hwspin_lock_request_specific
(
&
pdev
->
dev
,
ret
);
if
(
!
sadi
->
hwlock
)
{
ret
=
-
ENXIO
;
goto
put_ctlr
;
}
}
else
{
switch
(
ret
)
{
case
-
ENOENT
:
dev_info
(
&
pdev
->
dev
,
"no hardware spinlock supplied
\n
"
);
break
;
default:
dev_err
(
&
pdev
->
dev
,
"failed to find hwlock id, %d
\n
"
,
ret
);
/* fall-through */
case
-
EPROBE_DEFER
:
goto
put_ctlr
;
}
}
sprd_adi_hw_init
(
sadi
);
sprd_adi_set_wdt_rst_mode
(
sadi
);
ctlr
->
dev
.
of_node
=
pdev
->
dev
.
of_node
;
ctlr
->
bus_num
=
pdev
->
id
;
...
...
drivers/spi/spi-sprd.c
View file @
b769c5ba
...
...
@@ -843,10 +843,8 @@ static int sprd_spi_irq_init(struct platform_device *pdev, struct sprd_spi *ss)
int
ret
;
ss
->
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
ss
->
irq
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"failed to get irq resource
\n
"
);
if
(
ss
->
irq
<
0
)
return
ss
->
irq
;
}
ret
=
devm_request_irq
(
&
pdev
->
dev
,
ss
->
irq
,
sprd_spi_handle_irq
,
0
,
pdev
->
name
,
ss
);
...
...
drivers/spi/spi-st-ssc4.c
View file @
b769c5ba
...
...
@@ -298,7 +298,6 @@ static int spi_st_probe(struct platform_device *pdev)
{
struct
device_node
*
np
=
pdev
->
dev
.
of_node
;
struct
spi_master
*
master
;
struct
resource
*
res
;
struct
spi_st
*
spi_st
;
int
irq
,
ret
=
0
;
u32
var
;
...
...
@@ -331,8 +330,7 @@ static int spi_st_probe(struct platform_device *pdev)
init_completion
(
&
spi_st
->
done
);
/* Get resources */
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
spi_st
->
base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
spi_st
->
base
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
spi_st
->
base
))
{
ret
=
PTR_ERR
(
spi_st
->
base
);
goto
clk_disable
;
...
...
drivers/spi/spi-stm32-qspi.c
View file @
b769c5ba
...
...
@@ -570,11 +570,8 @@ static int stm32_qspi_probe(struct platform_device *pdev)
}
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
if
(
irq
!=
-
EPROBE_DEFER
)
dev_err
(
dev
,
"IRQ error missing or invalid
\n
"
);
if
(
irq
<
0
)
return
irq
;
}
ret
=
devm_request_irq
(
dev
,
irq
,
stm32_qspi_irq
,
0
,
dev_name
(
dev
),
qspi
);
...
...
drivers/spi/spi-sun4i.c
View file @
b769c5ba
...
...
@@ -428,7 +428,6 @@ static int sun4i_spi_probe(struct platform_device *pdev)
{
struct
spi_master
*
master
;
struct
sun4i_spi
*
sspi
;
struct
resource
*
res
;
int
ret
=
0
,
irq
;
master
=
spi_alloc_master
(
&
pdev
->
dev
,
sizeof
(
struct
sun4i_spi
));
...
...
@@ -440,8 +439,7 @@ static int sun4i_spi_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
master
);
sspi
=
spi_master_get_devdata
(
master
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
sspi
->
base_addr
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
sspi
->
base_addr
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
sspi
->
base_addr
))
{
ret
=
PTR_ERR
(
sspi
->
base_addr
);
goto
err_free_master
;
...
...
@@ -449,7 +447,6 @@ static int sun4i_spi_probe(struct platform_device *pdev)
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"No spi IRQ specified
\n
"
);
ret
=
-
ENXIO
;
goto
err_free_master
;
}
...
...
drivers/spi/spi-sun6i.c
View file @
b769c5ba
...
...
@@ -435,7 +435,6 @@ static int sun6i_spi_probe(struct platform_device *pdev)
{
struct
spi_master
*
master
;
struct
sun6i_spi
*
sspi
;
struct
resource
*
res
;
int
ret
=
0
,
irq
;
master
=
spi_alloc_master
(
&
pdev
->
dev
,
sizeof
(
struct
sun6i_spi
));
...
...
@@ -447,8 +446,7 @@ static int sun6i_spi_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
master
);
sspi
=
spi_master_get_devdata
(
master
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
sspi
->
base_addr
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
sspi
->
base_addr
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
sspi
->
base_addr
))
{
ret
=
PTR_ERR
(
sspi
->
base_addr
);
goto
err_free_master
;
...
...
@@ -456,7 +454,6 @@ static int sun6i_spi_probe(struct platform_device *pdev)
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"No spi IRQ specified
\n
"
);
ret
=
-
ENXIO
;
goto
err_free_master
;
}
...
...
drivers/spi/spi-synquacer.c
View file @
b769c5ba
...
...
@@ -670,7 +670,6 @@ static int synquacer_spi_probe(struct platform_device *pdev)
rx_irq
=
platform_get_irq
(
pdev
,
0
);
if
(
rx_irq
<=
0
)
{
dev_err
(
&
pdev
->
dev
,
"get rx_irq failed (%d)
\n
"
,
rx_irq
);
ret
=
rx_irq
;
goto
put_spi
;
}
...
...
@@ -685,7 +684,6 @@ static int synquacer_spi_probe(struct platform_device *pdev)
tx_irq
=
platform_get_irq
(
pdev
,
1
);
if
(
tx_irq
<=
0
)
{
dev_err
(
&
pdev
->
dev
,
"get tx_irq failed (%d)
\n
"
,
tx_irq
);
ret
=
tx_irq
;
goto
put_spi
;
}
...
...
drivers/spi/spi-tegra20-sflash.c
View file @
b769c5ba
...
...
@@ -419,7 +419,6 @@ static int tegra_sflash_probe(struct platform_device *pdev)
{
struct
spi_master
*
master
;
struct
tegra_sflash_data
*
tsd
;
struct
resource
*
r
;
int
ret
;
const
struct
of_device_id
*
match
;
...
...
@@ -451,8 +450,7 @@ static int tegra_sflash_probe(struct platform_device *pdev)
&
master
->
max_speed_hz
))
master
->
max_speed_hz
=
25000000
;
/* 25MHz */
r
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
tsd
->
base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
r
);
tsd
->
base
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
tsd
->
base
))
{
ret
=
PTR_ERR
(
tsd
->
base
);
goto
exit_free_master
;
...
...
drivers/spi/spi-ti-qspi.c
View file @
b769c5ba
...
...
@@ -717,7 +717,6 @@ static int ti_qspi_probe(struct platform_device *pdev)
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"no irq resource?
\n
"
);
ret
=
irq
;
goto
free_master
;
}
...
...
drivers/spi/spi-uniphier.c
View file @
b769c5ba
...
...
@@ -7,6 +7,7 @@
#include
<linux/bitfield.h>
#include
<linux/bitops.h>
#include
<linux/clk.h>
#include
<linux/delay.h>
#include
<linux/interrupt.h>
#include
<linux/io.h>
#include
<linux/module.h>
...
...
@@ -16,6 +17,7 @@
#include
<asm/unaligned.h>
#define SSI_TIMEOUT_MS 2000
#define SSI_POLL_TIMEOUT_US 200
#define SSI_MAX_CLK_DIVIDER 254
#define SSI_MIN_CLK_DIVIDER 4
...
...
@@ -227,8 +229,7 @@ static void uniphier_spi_setup_transfer(struct spi_device *spi,
priv
->
speed_hz
=
t
->
speed_hz
;
}
if
(
!
priv
->
is_save_param
)
priv
->
is_save_param
=
true
;
priv
->
is_save_param
=
true
;
/* reset FIFOs */
val
=
SSI_FC_TXFFL
|
SSI_FC_RXFFL
;
...
...
@@ -291,21 +292,23 @@ static void uniphier_spi_recv(struct uniphier_spi_priv *priv)
static
void
uniphier_spi_fill_tx_fifo
(
struct
uniphier_spi_priv
*
priv
)
{
unsigned
int
tx_count
;
unsigned
int
fifo_threshold
,
fill_bytes
;
u32
val
;
tx_count
=
DIV_ROUND_UP
(
priv
->
t
x_bytes
,
fifo_threshold
=
DIV_ROUND_UP
(
priv
->
r
x_bytes
,
bytes_per_word
(
priv
->
bits_per_word
));
tx_count
=
min
(
tx_count
,
SSI_FIFO_DEPTH
);
fifo_threshold
=
min
(
fifo_threshold
,
SSI_FIFO_DEPTH
);
fill_bytes
=
fifo_threshold
-
(
priv
->
rx_bytes
-
priv
->
tx_bytes
);
/* set fifo threshold */
val
=
readl
(
priv
->
base
+
SSI_FC
);
val
&=
~
(
SSI_FC_TXFTH_MASK
|
SSI_FC_RXFTH_MASK
);
val
|=
FIELD_PREP
(
SSI_FC_TXFTH_MASK
,
tx_count
);
val
|=
FIELD_PREP
(
SSI_FC_RXFTH_MASK
,
tx_count
);
val
|=
FIELD_PREP
(
SSI_FC_TXFTH_MASK
,
fifo_threshold
);
val
|=
FIELD_PREP
(
SSI_FC_RXFTH_MASK
,
fifo_threshold
);
writel
(
val
,
priv
->
base
+
SSI_FC
);
while
(
tx_count
--
)
while
(
fill_bytes
--
)
uniphier_spi_send
(
priv
);
}
...
...
@@ -324,20 +327,14 @@ static void uniphier_spi_set_cs(struct spi_device *spi, bool enable)
writel
(
val
,
priv
->
base
+
SSI_FPS
);
}
static
int
uniphier_spi_transfer_one
(
struct
spi_master
*
master
,
struct
spi_device
*
spi
,
struct
spi_transfer
*
t
)
static
int
uniphier_spi_transfer_one
_irq
(
struct
spi_master
*
master
,
struct
spi_device
*
spi
,
struct
spi_transfer
*
t
)
{
struct
uniphier_spi_priv
*
priv
=
spi_master_get_devdata
(
master
);
struct
device
*
dev
=
master
->
dev
.
parent
;
unsigned
long
time_left
;
/* Terminate and return success for 0 byte length transfer */
if
(
!
t
->
len
)
return
0
;
uniphier_spi_setup_transfer
(
spi
,
t
);
reinit_completion
(
&
priv
->
xfer_done
);
uniphier_spi_fill_tx_fifo
(
priv
);
...
...
@@ -357,6 +354,59 @@ static int uniphier_spi_transfer_one(struct spi_master *master,
return
priv
->
error
;
}
static
int
uniphier_spi_transfer_one_poll
(
struct
spi_master
*
master
,
struct
spi_device
*
spi
,
struct
spi_transfer
*
t
)
{
struct
uniphier_spi_priv
*
priv
=
spi_master_get_devdata
(
master
);
int
loop
=
SSI_POLL_TIMEOUT_US
*
10
;
while
(
priv
->
tx_bytes
)
{
uniphier_spi_fill_tx_fifo
(
priv
);
while
((
priv
->
rx_bytes
-
priv
->
tx_bytes
)
>
0
)
{
while
(
!
(
readl
(
priv
->
base
+
SSI_SR
)
&
SSI_SR_RNE
)
&&
loop
--
)
ndelay
(
100
);
if
(
loop
==
-
1
)
goto
irq_transfer
;
uniphier_spi_recv
(
priv
);
}
}
return
0
;
irq_transfer:
return
uniphier_spi_transfer_one_irq
(
master
,
spi
,
t
);
}
static
int
uniphier_spi_transfer_one
(
struct
spi_master
*
master
,
struct
spi_device
*
spi
,
struct
spi_transfer
*
t
)
{
struct
uniphier_spi_priv
*
priv
=
spi_master_get_devdata
(
master
);
unsigned
long
threshold
;
/* Terminate and return success for 0 byte length transfer */
if
(
!
t
->
len
)
return
0
;
uniphier_spi_setup_transfer
(
spi
,
t
);
/*
* If the transfer operation will take longer than
* SSI_POLL_TIMEOUT_US, it should use irq.
*/
threshold
=
DIV_ROUND_UP
(
SSI_POLL_TIMEOUT_US
*
priv
->
speed_hz
,
USEC_PER_SEC
*
BITS_PER_BYTE
);
if
(
t
->
len
>
threshold
)
return
uniphier_spi_transfer_one_irq
(
master
,
spi
,
t
);
else
return
uniphier_spi_transfer_one_poll
(
master
,
spi
,
t
);
}
static
int
uniphier_spi_prepare_transfer_hardware
(
struct
spi_master
*
master
)
{
struct
uniphier_spi_priv
*
priv
=
spi_master_get_devdata
(
master
);
...
...
@@ -420,7 +470,6 @@ static int uniphier_spi_probe(struct platform_device *pdev)
{
struct
uniphier_spi_priv
*
priv
;
struct
spi_master
*
master
;
struct
resource
*
res
;
unsigned
long
clk_rate
;
int
irq
;
int
ret
;
...
...
@@ -435,8 +484,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)
priv
->
master
=
master
;
priv
->
is_save_param
=
false
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
priv
->
base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
priv
->
base
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
priv
->
base
))
{
ret
=
PTR_ERR
(
priv
->
base
);
goto
out_master_put
;
...
...
@@ -455,7 +503,6 @@ static int uniphier_spi_probe(struct platform_device *pdev)
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"failed to get IRQ
\n
"
);
ret
=
irq
;
goto
out_disable_clk
;
}
...
...
drivers/spi/spi-xlp.c
View file @
b769c5ba
...
...
@@ -370,7 +370,6 @@ static int xlp_spi_probe(struct platform_device *pdev)
{
struct
spi_master
*
master
;
struct
xlp_spi_priv
*
xspi
;
struct
resource
*
res
;
struct
clk
*
clk
;
int
irq
,
err
;
...
...
@@ -378,16 +377,13 @@ static int xlp_spi_probe(struct platform_device *pdev)
if
(
!
xspi
)
return
-
ENOMEM
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
xspi
->
base
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
xspi
->
base
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
xspi
->
base
))
return
PTR_ERR
(
xspi
->
base
);
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
irq
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"no IRQ resource found: %d
\n
"
,
irq
);
if
(
irq
<
0
)
return
irq
;
}
err
=
devm_request_irq
(
&
pdev
->
dev
,
irq
,
xlp_spi_interrupt
,
0
,
pdev
->
name
,
xspi
);
if
(
err
)
{
...
...
drivers/spi/spi-zynq-qspi.c
View file @
b769c5ba
...
...
@@ -620,7 +620,6 @@ static int zynq_qspi_probe(struct platform_device *pdev)
struct
device
*
dev
=
&
pdev
->
dev
;
struct
device_node
*
np
=
dev
->
of_node
;
struct
zynq_qspi
*
xqspi
;
struct
resource
*
res
;
u32
num_cs
;
ctlr
=
spi_alloc_master
(
&
pdev
->
dev
,
sizeof
(
*
xqspi
));
...
...
@@ -630,8 +629,7 @@ static int zynq_qspi_probe(struct platform_device *pdev)
xqspi
=
spi_controller_get_devdata
(
ctlr
);
xqspi
->
dev
=
dev
;
platform_set_drvdata
(
pdev
,
xqspi
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
xqspi
->
regs
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
xqspi
->
regs
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
xqspi
->
regs
))
{
ret
=
PTR_ERR
(
xqspi
->
regs
);
goto
remove_master
;
...
...
@@ -671,7 +669,6 @@ static int zynq_qspi_probe(struct platform_device *pdev)
xqspi
->
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
xqspi
->
irq
<=
0
)
{
ret
=
-
ENXIO
;
dev_err
(
&
pdev
->
dev
,
"irq resource not found
\n
"
);
goto
remove_master
;
}
ret
=
devm_request_irq
(
&
pdev
->
dev
,
xqspi
->
irq
,
zynq_qspi_irq
,
...
...
drivers/spi/spi-zynqmp-gqspi.c
View file @
b769c5ba
...
...
@@ -1016,7 +1016,6 @@ static int zynqmp_qspi_probe(struct platform_device *pdev)
int
ret
=
0
;
struct
spi_master
*
master
;
struct
zynqmp_qspi
*
xqspi
;
struct
resource
*
res
;
struct
device
*
dev
=
&
pdev
->
dev
;
eemi_ops
=
zynqmp_pm_get_eemi_ops
();
...
...
@@ -1031,8 +1030,7 @@ static int zynqmp_qspi_probe(struct platform_device *pdev)
master
->
dev
.
of_node
=
pdev
->
dev
.
of_node
;
platform_set_drvdata
(
pdev
,
master
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
xqspi
->
regs
=
devm_ioremap_resource
(
&
pdev
->
dev
,
res
);
xqspi
->
regs
=
devm_platform_ioremap_resource
(
pdev
,
0
);
if
(
IS_ERR
(
xqspi
->
regs
))
{
ret
=
PTR_ERR
(
xqspi
->
regs
);
goto
remove_master
;
...
...
@@ -1077,7 +1075,6 @@ static int zynqmp_qspi_probe(struct platform_device *pdev)
xqspi
->
irq
=
platform_get_irq
(
pdev
,
0
);
if
(
xqspi
->
irq
<=
0
)
{
ret
=
-
ENXIO
;
dev_err
(
dev
,
"irq resource not found
\n
"
);
goto
clk_dis_all
;
}
ret
=
devm_request_irq
(
&
pdev
->
dev
,
xqspi
->
irq
,
zynqmp_qspi_irq
,
...
...
drivers/spi/spi.c
View file @
b769c5ba
...
...
@@ -1265,8 +1265,9 @@ EXPORT_SYMBOL_GPL(spi_finalize_current_transfer);
*/
static
void
__spi_pump_messages
(
struct
spi_controller
*
ctlr
,
bool
in_kthread
)
{
unsigned
long
flags
;
struct
spi_message
*
msg
;
bool
was_busy
=
false
;
unsigned
long
flags
;
int
ret
;
/* Lock queue */
...
...
@@ -1325,10 +1326,10 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
}
/* Extract head of queue */
ctlr
->
cur_msg
=
list_first_entry
(
&
ctlr
->
queue
,
struct
spi_message
,
queue
)
;
msg
=
list_first_entry
(
&
ctlr
->
queue
,
struct
spi_message
,
queue
);
ctlr
->
cur_msg
=
msg
;
list_del_init
(
&
ctlr
->
cur_
msg
->
queue
);
list_del_init
(
&
msg
->
queue
);
if
(
ctlr
->
busy
)
was_busy
=
true
;
else
...
...
@@ -1361,7 +1362,7 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
if
(
ctlr
->
auto_runtime_pm
)
pm_runtime_put
(
ctlr
->
dev
.
parent
);
ctlr
->
cur_
msg
->
status
=
ret
;
msg
->
status
=
ret
;
spi_finalize_current_message
(
ctlr
);
mutex_unlock
(
&
ctlr
->
io_mutex
);
...
...
@@ -1369,28 +1370,28 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
}
}
trace_spi_message_start
(
ctlr
->
cur_
msg
);
trace_spi_message_start
(
msg
);
if
(
ctlr
->
prepare_message
)
{
ret
=
ctlr
->
prepare_message
(
ctlr
,
ctlr
->
cur_
msg
);
ret
=
ctlr
->
prepare_message
(
ctlr
,
msg
);
if
(
ret
)
{
dev_err
(
&
ctlr
->
dev
,
"failed to prepare message: %d
\n
"
,
ret
);
ctlr
->
cur_
msg
->
status
=
ret
;
msg
->
status
=
ret
;
spi_finalize_current_message
(
ctlr
);
goto
out
;
}
ctlr
->
cur_msg_prepared
=
true
;
}
ret
=
spi_map_msg
(
ctlr
,
ctlr
->
cur_
msg
);
ret
=
spi_map_msg
(
ctlr
,
msg
);
if
(
ret
)
{
ctlr
->
cur_
msg
->
status
=
ret
;
msg
->
status
=
ret
;
spi_finalize_current_message
(
ctlr
);
goto
out
;
}
ret
=
ctlr
->
transfer_one_message
(
ctlr
,
ctlr
->
cur_
msg
);
ret
=
ctlr
->
transfer_one_message
(
ctlr
,
msg
);
if
(
ret
)
{
dev_err
(
&
ctlr
->
dev
,