Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
7216a418
Commit
7216a418
authored
Jun 28, 2014
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branches 'spi/fix/pxa2xx', 'spi/fix/qup' and 'spi/fix/sh-sci' into spi-linus
parents
a497c3ba
e61f487f
4a8573ab
25f8a7cc
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
27 additions
and
35 deletions
+27
-35
Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
+6
-0
drivers/spi/spi-pxa2xx.c
drivers/spi/spi-pxa2xx.c
+6
-2
drivers/spi/spi-qup.c
drivers/spi/spi-qup.c
+13
-31
drivers/spi/spi-sh-sci.c
drivers/spi/spi-sh-sci.c
+2
-2
No files found.
Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
View file @
7216a418
...
...
@@ -23,6 +23,12 @@ Optional properties:
- spi-max-frequency: Specifies maximum SPI clock frequency,
Units - Hz. Definition as per
Documentation/devicetree/bindings/spi/spi-bus.txt
- num-cs: total number of chipselects
- cs-gpios: should specify GPIOs used for chipselects.
The gpios will be referred to as reg = <index> in the SPI child
nodes. If unspecified, a single SPI device without a chip
select can be used.
SPI slave nodes must be children of the SPI master node and can contain
properties described in Documentation/devicetree/bindings/spi/spi-bus.txt
...
...
drivers/spi/spi-pxa2xx.c
View file @
7216a418
...
...
@@ -118,6 +118,7 @@ static void lpss_ssp_setup(struct driver_data *drv_data)
*/
orig
=
readl
(
drv_data
->
ioaddr
+
offset
+
SPI_CS_CONTROL
);
/* Test SPI_CS_CONTROL_SW_MODE bit enabling */
value
=
orig
|
SPI_CS_CONTROL_SW_MODE
;
writel
(
value
,
drv_data
->
ioaddr
+
offset
+
SPI_CS_CONTROL
);
value
=
readl
(
drv_data
->
ioaddr
+
offset
+
SPI_CS_CONTROL
);
...
...
@@ -126,10 +127,13 @@ static void lpss_ssp_setup(struct driver_data *drv_data)
goto
detection_done
;
}
value
&=
~
SPI_CS_CONTROL_SW_MODE
;
orig
=
readl
(
drv_data
->
ioaddr
+
offset
+
SPI_CS_CONTROL
);
/* Test SPI_CS_CONTROL_SW_MODE bit disabling */
value
=
orig
&
~
SPI_CS_CONTROL_SW_MODE
;
writel
(
value
,
drv_data
->
ioaddr
+
offset
+
SPI_CS_CONTROL
);
value
=
readl
(
drv_data
->
ioaddr
+
offset
+
SPI_CS_CONTROL
);
if
(
value
!=
orig
)
{
if
(
value
!=
(
orig
&
~
SPI_CS_CONTROL_SW_MODE
)
)
{
offset
=
0x800
;
goto
detection_done
;
}
...
...
drivers/spi/spi-qup.c
View file @
7216a418
...
...
@@ -424,31 +424,6 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer)
return
0
;
}
static
void
spi_qup_set_cs
(
struct
spi_device
*
spi
,
bool
enable
)
{
struct
spi_qup
*
controller
=
spi_master_get_devdata
(
spi
->
master
);
u32
iocontol
,
mask
;
iocontol
=
readl_relaxed
(
controller
->
base
+
SPI_IO_CONTROL
);
/* Disable auto CS toggle and use manual */
iocontol
&=
~
SPI_IO_C_MX_CS_MODE
;
iocontol
|=
SPI_IO_C_FORCE_CS
;
iocontol
&=
~
SPI_IO_C_CS_SELECT_MASK
;
iocontol
|=
SPI_IO_C_CS_SELECT
(
spi
->
chip_select
);
mask
=
SPI_IO_C_CS_N_POLARITY_0
<<
spi
->
chip_select
;
if
(
enable
)
iocontol
|=
mask
;
else
iocontol
&=
~
mask
;
writel_relaxed
(
iocontol
,
controller
->
base
+
SPI_IO_CONTROL
);
}
static
int
spi_qup_transfer_one
(
struct
spi_master
*
master
,
struct
spi_device
*
spi
,
struct
spi_transfer
*
xfer
)
...
...
@@ -571,12 +546,16 @@ static int spi_qup_probe(struct platform_device *pdev)
return
-
ENOMEM
;
}
/* use num-cs unless not present or out of range */
if
(
of_property_read_u16
(
dev
->
of_node
,
"num-cs"
,
&
master
->
num_chipselect
)
||
(
master
->
num_chipselect
>
SPI_NUM_CHIPSELECTS
))
master
->
num_chipselect
=
SPI_NUM_CHIPSELECTS
;
master
->
bus_num
=
pdev
->
id
;
master
->
mode_bits
=
SPI_CPOL
|
SPI_CPHA
|
SPI_CS_HIGH
|
SPI_LOOP
;
master
->
num_chipselect
=
SPI_NUM_CHIPSELECTS
;
master
->
bits_per_word_mask
=
SPI_BPW_RANGE_MASK
(
4
,
32
);
master
->
max_speed_hz
=
max_freq
;
master
->
set_cs
=
spi_qup_set_cs
;
master
->
transfer_one
=
spi_qup_transfer_one
;
master
->
dev
.
of_node
=
pdev
->
dev
.
of_node
;
master
->
auto_runtime_pm
=
true
;
...
...
@@ -640,16 +619,19 @@ static int spi_qup_probe(struct platform_device *pdev)
if
(
ret
)
goto
error
;
ret
=
devm_spi_register_master
(
dev
,
master
);
if
(
ret
)
goto
error
;
pm_runtime_set_autosuspend_delay
(
dev
,
MSEC_PER_SEC
);
pm_runtime_use_autosuspend
(
dev
);
pm_runtime_set_active
(
dev
);
pm_runtime_enable
(
dev
);
ret
=
devm_spi_register_master
(
dev
,
master
);
if
(
ret
)
goto
disable_pm
;
return
0
;
disable_pm:
pm_runtime_disable
(
&
pdev
->
dev
);
error:
clk_disable_unprepare
(
cclk
);
clk_disable_unprepare
(
iclk
);
...
...
drivers/spi/spi-sh-sci.c
View file @
7216a418
...
...
@@ -175,9 +175,9 @@ static int sh_sci_spi_remove(struct platform_device *dev)
{
struct
sh_sci_spi
*
sp
=
platform_get_drvdata
(
dev
);
iounmap
(
sp
->
membase
);
setbits
(
sp
,
PIN_INIT
,
0
);
spi_bitbang_stop
(
&
sp
->
bitbang
);
setbits
(
sp
,
PIN_INIT
,
0
);
iounmap
(
sp
->
membase
);
spi_master_put
(
sp
->
bitbang
.
master
);
return
0
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment