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
9c0a788b
Commit
9c0a788b
authored
Oct 18, 2010
by
Mike Frysinger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
spi/bfin_spi: namespace local structs
Signed-off-by:
Mike Frysinger
<
vapier@gentoo.org
>
parent
6f7c17f4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
58 deletions
+61
-58
drivers/spi/spi_bfin5xx.c
drivers/spi/spi_bfin5xx.c
+61
-58
No files found.
drivers/spi/spi_bfin5xx.c
View file @
9c0a788b
/*
* Blackfin On-Chip SPI Driver
*
* Copyright 2004-20
07
Analog Devices Inc.
* Copyright 2004-20
10
Analog Devices Inc.
*
* Enter bugs at http://blackfin.uclinux.org/
*
...
...
@@ -42,15 +42,15 @@ MODULE_LICENSE("GPL");
#define DONE_STATE ((void *)2)
#define ERROR_STATE ((void *)-1)
struct
master_data
;
struct
bfin_spi_
master_data
;
struct
transfer_ops
{
void
(
*
write
)
(
struct
master_data
*
);
void
(
*
read
)
(
struct
master_data
*
);
void
(
*
duplex
)
(
struct
master_data
*
);
struct
bfin_spi_
transfer_ops
{
void
(
*
write
)
(
struct
bfin_spi_
master_data
*
);
void
(
*
read
)
(
struct
bfin_spi_
master_data
*
);
void
(
*
duplex
)
(
struct
bfin_spi_
master_data
*
);
};
struct
master_data
{
struct
bfin_spi_
master_data
{
/* Driver model hookup */
struct
platform_device
*
pdev
;
...
...
@@ -80,7 +80,7 @@ struct master_data {
/* Current message transfer state info */
struct
spi_message
*
cur_msg
;
struct
spi_transfer
*
cur_transfer
;
struct
slave_data
*
cur_chip
;
struct
bfin_spi_
slave_data
*
cur_chip
;
size_t
len_in_bytes
;
size_t
len
;
void
*
tx
;
...
...
@@ -105,10 +105,10 @@ struct master_data {
u16
flag_reg
;
int
cs_change
;
const
struct
transfer_ops
*
ops
;
const
struct
bfin_spi_
transfer_ops
*
ops
;
};
struct
slave_data
{
struct
bfin_spi_
slave_data
{
u16
ctl_reg
;
u16
baud
;
u16
flag
;
...
...
@@ -119,13 +119,13 @@ struct slave_data {
u32
cs_gpio
;
u16
idle_tx_val
;
u8
pio_interrupt
;
/* use spi data irq */
const
struct
transfer_ops
*
ops
;
const
struct
bfin_spi_
transfer_ops
*
ops
;
};
#define DEFINE_SPI_REG(reg, off) \
static inline u16 read_##reg(struct master_data *drv_data) \
static inline u16 read_##reg(struct
bfin_spi_
master_data *drv_data) \
{ return bfin_read16(drv_data->regs_base + off); } \
static inline void write_##reg(struct master_data *drv_data, u16 v) \
static inline void write_##reg(struct
bfin_spi_
master_data *drv_data, u16 v) \
{ bfin_write16(drv_data->regs_base + off, v); }
DEFINE_SPI_REG
(
CTRL
,
0x00
)
...
...
@@ -136,7 +136,7 @@ DEFINE_SPI_REG(RDBR, 0x10)
DEFINE_SPI_REG
(
BAUD
,
0x14
)
DEFINE_SPI_REG
(
SHAW
,
0x18
)
static
void
bfin_spi_enable
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_enable
(
struct
bfin_spi_
master_data
*
drv_data
)
{
u16
cr
;
...
...
@@ -144,7 +144,7 @@ static void bfin_spi_enable(struct master_data *drv_data)
write_CTRL
(
drv_data
,
(
cr
|
BIT_CTL_ENABLE
));
}
static
void
bfin_spi_disable
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_disable
(
struct
bfin_spi_
master_data
*
drv_data
)
{
u16
cr
;
...
...
@@ -167,7 +167,7 @@ static u16 hz_to_spi_baud(u32 speed_hz)
return
spi_baud
;
}
static
int
bfin_spi_flush
(
struct
master_data
*
drv_data
)
static
int
bfin_spi_flush
(
struct
bfin_spi_
master_data
*
drv_data
)
{
unsigned
long
limit
=
loops_per_jiffy
<<
1
;
...
...
@@ -181,7 +181,7 @@ static int bfin_spi_flush(struct master_data *drv_data)
}
/* Chip select operation functions for cs_change flag */
static
void
bfin_spi_cs_active
(
struct
master_data
*
drv_data
,
struct
slave_data
*
chip
)
static
void
bfin_spi_cs_active
(
struct
bfin_spi_master_data
*
drv_data
,
struct
bfin_spi_
slave_data
*
chip
)
{
if
(
likely
(
chip
->
chip_select_num
<
MAX_CTRL_CS
))
{
u16
flag
=
read_FLAG
(
drv_data
);
...
...
@@ -194,7 +194,8 @@ static void bfin_spi_cs_active(struct master_data *drv_data, struct slave_data *
}
}
static
void
bfin_spi_cs_deactive
(
struct
master_data
*
drv_data
,
struct
slave_data
*
chip
)
static
void
bfin_spi_cs_deactive
(
struct
bfin_spi_master_data
*
drv_data
,
struct
bfin_spi_slave_data
*
chip
)
{
if
(
likely
(
chip
->
chip_select_num
<
MAX_CTRL_CS
))
{
u16
flag
=
read_FLAG
(
drv_data
);
...
...
@@ -212,7 +213,8 @@ static void bfin_spi_cs_deactive(struct master_data *drv_data, struct slave_data
}
/* enable or disable the pin muxed by GPIO and SPI CS to work as SPI CS */
static
inline
void
bfin_spi_cs_enable
(
struct
master_data
*
drv_data
,
struct
slave_data
*
chip
)
static
inline
void
bfin_spi_cs_enable
(
struct
bfin_spi_master_data
*
drv_data
,
struct
bfin_spi_slave_data
*
chip
)
{
if
(
chip
->
chip_select_num
<
MAX_CTRL_CS
)
{
u16
flag
=
read_FLAG
(
drv_data
);
...
...
@@ -223,7 +225,8 @@ static inline void bfin_spi_cs_enable(struct master_data *drv_data, struct slave
}
}
static
inline
void
bfin_spi_cs_disable
(
struct
master_data
*
drv_data
,
struct
slave_data
*
chip
)
static
inline
void
bfin_spi_cs_disable
(
struct
bfin_spi_master_data
*
drv_data
,
struct
bfin_spi_slave_data
*
chip
)
{
if
(
chip
->
chip_select_num
<
MAX_CTRL_CS
)
{
u16
flag
=
read_FLAG
(
drv_data
);
...
...
@@ -235,9 +238,9 @@ static inline void bfin_spi_cs_disable(struct master_data *drv_data, struct slav
}
/* stop controller and re-config current chip*/
static
void
bfin_spi_restore_state
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_restore_state
(
struct
bfin_spi_
master_data
*
drv_data
)
{
struct
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
bfin_spi_
slave_data
*
chip
=
drv_data
->
cur_chip
;
/* Clear status and disable clock */
write_STAT
(
drv_data
,
BIT_STAT_CLR
);
...
...
@@ -255,12 +258,12 @@ static void bfin_spi_restore_state(struct master_data *drv_data)
}
/* used to kick off transfer in rx mode and read unwanted RX data */
static
inline
void
bfin_spi_dummy_read
(
struct
master_data
*
drv_data
)
static
inline
void
bfin_spi_dummy_read
(
struct
bfin_spi_
master_data
*
drv_data
)
{
(
void
)
read_RDBR
(
drv_data
);
}
static
void
bfin_spi_u8_writer
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_u8_writer
(
struct
bfin_spi_
master_data
*
drv_data
)
{
/* clear RXS (we check for RXS inside the loop) */
bfin_spi_dummy_read
(
drv_data
);
...
...
@@ -276,7 +279,7 @@ static void bfin_spi_u8_writer(struct master_data *drv_data)
}
}
static
void
bfin_spi_u8_reader
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_u8_reader
(
struct
bfin_spi_
master_data
*
drv_data
)
{
u16
tx_val
=
drv_data
->
cur_chip
->
idle_tx_val
;
...
...
@@ -291,7 +294,7 @@ static void bfin_spi_u8_reader(struct master_data *drv_data)
}
}
static
void
bfin_spi_u8_duplex
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_u8_duplex
(
struct
bfin_spi_
master_data
*
drv_data
)
{
/* discard old RX data and clear RXS */
bfin_spi_dummy_read
(
drv_data
);
...
...
@@ -304,13 +307,13 @@ static void bfin_spi_u8_duplex(struct master_data *drv_data)
}
}
static
const
struct
transfer_ops
bfin
_transfer_ops_u8
=
{
static
const
struct
bfin_spi_transfer_ops
bfin_bfin_spi
_transfer_ops_u8
=
{
.
write
=
bfin_spi_u8_writer
,
.
read
=
bfin_spi_u8_reader
,
.
duplex
=
bfin_spi_u8_duplex
,
};
static
void
bfin_spi_u16_writer
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_u16_writer
(
struct
bfin_spi_
master_data
*
drv_data
)
{
/* clear RXS (we check for RXS inside the loop) */
bfin_spi_dummy_read
(
drv_data
);
...
...
@@ -327,7 +330,7 @@ static void bfin_spi_u16_writer(struct master_data *drv_data)
}
}
static
void
bfin_spi_u16_reader
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_u16_reader
(
struct
bfin_spi_
master_data
*
drv_data
)
{
u16
tx_val
=
drv_data
->
cur_chip
->
idle_tx_val
;
...
...
@@ -343,7 +346,7 @@ static void bfin_spi_u16_reader(struct master_data *drv_data)
}
}
static
void
bfin_spi_u16_duplex
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_u16_duplex
(
struct
bfin_spi_
master_data
*
drv_data
)
{
/* discard old RX data and clear RXS */
bfin_spi_dummy_read
(
drv_data
);
...
...
@@ -358,14 +361,14 @@ static void bfin_spi_u16_duplex(struct master_data *drv_data)
}
}
static
const
struct
transfer_ops
bfin
_transfer_ops_u16
=
{
static
const
struct
bfin_spi_transfer_ops
bfin_bfin_spi
_transfer_ops_u16
=
{
.
write
=
bfin_spi_u16_writer
,
.
read
=
bfin_spi_u16_reader
,
.
duplex
=
bfin_spi_u16_duplex
,
};
/* test if there is more transfer to be done */
static
void
*
bfin_spi_next_transfer
(
struct
master_data
*
drv_data
)
static
void
*
bfin_spi_next_transfer
(
struct
bfin_spi_
master_data
*
drv_data
)
{
struct
spi_message
*
msg
=
drv_data
->
cur_msg
;
struct
spi_transfer
*
trans
=
drv_data
->
cur_transfer
;
...
...
@@ -384,9 +387,9 @@ static void *bfin_spi_next_transfer(struct master_data *drv_data)
* caller already set message->status;
* dma and pio irqs are blocked give finished message back
*/
static
void
bfin_spi_giveback
(
struct
master_data
*
drv_data
)
static
void
bfin_spi_giveback
(
struct
bfin_spi_
master_data
*
drv_data
)
{
struct
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
bfin_spi_
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
spi_transfer
*
last_transfer
;
unsigned
long
flags
;
struct
spi_message
*
msg
;
...
...
@@ -418,8 +421,8 @@ static void bfin_spi_giveback(struct master_data *drv_data)
/* spi data irq handler */
static
irqreturn_t
bfin_spi_pio_irq_handler
(
int
irq
,
void
*
dev_id
)
{
struct
master_data
*
drv_data
=
dev_id
;
struct
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
bfin_spi_
master_data
*
drv_data
=
dev_id
;
struct
bfin_spi_
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
spi_message
*
msg
=
drv_data
->
cur_msg
;
int
n_bytes
=
drv_data
->
n_bytes
;
...
...
@@ -490,8 +493,8 @@ static irqreturn_t bfin_spi_pio_irq_handler(int irq, void *dev_id)
static
irqreturn_t
bfin_spi_dma_irq_handler
(
int
irq
,
void
*
dev_id
)
{
struct
master_data
*
drv_data
=
dev_id
;
struct
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
bfin_spi_
master_data
*
drv_data
=
dev_id
;
struct
bfin_spi_
slave_data
*
chip
=
drv_data
->
cur_chip
;
struct
spi_message
*
msg
=
drv_data
->
cur_msg
;
unsigned
long
timeout
;
unsigned
short
dmastat
=
get_dma_curr_irqstat
(
drv_data
->
dma_channel
);
...
...
@@ -554,11 +557,11 @@ static irqreturn_t bfin_spi_dma_irq_handler(int irq, void *dev_id)
static
void
bfin_spi_pump_transfers
(
unsigned
long
data
)
{
struct
master_data
*
drv_data
=
(
struct
master_data
*
)
data
;
struct
bfin_spi_master_data
*
drv_data
=
(
struct
bfin_spi_
master_data
*
)
data
;
struct
spi_message
*
message
=
NULL
;
struct
spi_transfer
*
transfer
=
NULL
;
struct
spi_transfer
*
previous
=
NULL
;
struct
slave_data
*
chip
=
NULL
;
struct
bfin_spi_
slave_data
*
chip
=
NULL
;
unsigned
int
bits_per_word
;
u16
cr
,
cr_width
,
dma_width
,
dma_config
;
u32
tranf_success
=
1
;
...
...
@@ -643,12 +646,12 @@ static void bfin_spi_pump_transfers(unsigned long data)
drv_data
->
n_bytes
=
1
;
drv_data
->
len
=
transfer
->
len
;
cr_width
=
0
;
drv_data
->
ops
=
&
bfin_transfer_ops_u8
;
drv_data
->
ops
=
&
bfin_
bfin_spi_
transfer_ops_u8
;
}
else
if
(
bits_per_word
==
16
)
{
drv_data
->
n_bytes
=
2
;
drv_data
->
len
=
(
transfer
->
len
)
>>
1
;
cr_width
=
BIT_CTL_WORDSIZE
;
drv_data
->
ops
=
&
bfin_transfer_ops_u16
;
drv_data
->
ops
=
&
bfin_
bfin_spi_
transfer_ops_u16
;
}
else
{
dev_err
(
&
drv_data
->
pdev
->
dev
,
"transfer: unsupported bits_per_word
\n
"
);
message
->
status
=
-
EINVAL
;
...
...
@@ -661,7 +664,7 @@ static void bfin_spi_pump_transfers(unsigned long data)
dev_dbg
(
&
drv_data
->
pdev
->
dev
,
"transfer: drv_data->ops is %p, chip->ops is %p, u8_ops is %p
\n
"
,
drv_data
->
ops
,
chip
->
ops
,
&
bfin_transfer_ops_u8
);
drv_data
->
ops
,
chip
->
ops
,
&
bfin_
bfin_spi_
transfer_ops_u8
);
message
->
state
=
RUNNING_STATE
;
dma_config
=
0
;
...
...
@@ -868,10 +871,10 @@ static void bfin_spi_pump_transfers(unsigned long data)
/* pop a msg from queue and kick off real transfer */
static
void
bfin_spi_pump_messages
(
struct
work_struct
*
work
)
{
struct
master_data
*
drv_data
;
struct
bfin_spi_
master_data
*
drv_data
;
unsigned
long
flags
;
drv_data
=
container_of
(
work
,
struct
master_data
,
pump_messages
);
drv_data
=
container_of
(
work
,
struct
bfin_spi_
master_data
,
pump_messages
);
/* Lock queue and check for queue work */
spin_lock_irqsave
(
&
drv_data
->
lock
,
flags
);
...
...
@@ -925,7 +928,7 @@ static void bfin_spi_pump_messages(struct work_struct *work)
*/
static
int
bfin_spi_transfer
(
struct
spi_device
*
spi
,
struct
spi_message
*
msg
)
{
struct
master_data
*
drv_data
=
spi_master_get_devdata
(
spi
->
master
);
struct
bfin_spi_
master_data
*
drv_data
=
spi_master_get_devdata
(
spi
->
master
);
unsigned
long
flags
;
spin_lock_irqsave
(
&
drv_data
->
lock
,
flags
);
...
...
@@ -970,8 +973,8 @@ static u16 ssel[][MAX_SPI_SSEL] = {
static
int
bfin_spi_setup
(
struct
spi_device
*
spi
)
{
struct
bfin5xx_spi_chip
*
chip_info
;
struct
slave_data
*
chip
=
NULL
;
struct
master_data
*
drv_data
=
spi_master_get_devdata
(
spi
->
master
);
struct
bfin_spi_
slave_data
*
chip
=
NULL
;
struct
bfin_spi_
master_data
*
drv_data
=
spi_master_get_devdata
(
spi
->
master
);
u16
bfin_ctl_reg
;
int
ret
=
-
EINVAL
;
...
...
@@ -1152,8 +1155,8 @@ static int bfin_spi_setup(struct spi_device *spi)
*/
static
void
bfin_spi_cleanup
(
struct
spi_device
*
spi
)
{
struct
slave_data
*
chip
=
spi_get_ctldata
(
spi
);
struct
master_data
*
drv_data
=
spi_master_get_devdata
(
spi
->
master
);
struct
bfin_spi_
slave_data
*
chip
=
spi_get_ctldata
(
spi
);
struct
bfin_spi_
master_data
*
drv_data
=
spi_master_get_devdata
(
spi
->
master
);
if
(
!
chip
)
return
;
...
...
@@ -1170,7 +1173,7 @@ static void bfin_spi_cleanup(struct spi_device *spi)
spi_set_ctldata
(
spi
,
NULL
);
}
static
inline
int
bfin_spi_init_queue
(
struct
master_data
*
drv_data
)
static
inline
int
bfin_spi_init_queue
(
struct
bfin_spi_
master_data
*
drv_data
)
{
INIT_LIST_HEAD
(
&
drv_data
->
queue
);
spin_lock_init
(
&
drv_data
->
lock
);
...
...
@@ -1192,7 +1195,7 @@ static inline int bfin_spi_init_queue(struct master_data *drv_data)
return
0
;
}
static
inline
int
bfin_spi_start_queue
(
struct
master_data
*
drv_data
)
static
inline
int
bfin_spi_start_queue
(
struct
bfin_spi_
master_data
*
drv_data
)
{
unsigned
long
flags
;
...
...
@@ -1214,7 +1217,7 @@ static inline int bfin_spi_start_queue(struct master_data *drv_data)
return
0
;
}
static
inline
int
bfin_spi_stop_queue
(
struct
master_data
*
drv_data
)
static
inline
int
bfin_spi_stop_queue
(
struct
bfin_spi_
master_data
*
drv_data
)
{
unsigned
long
flags
;
unsigned
limit
=
500
;
...
...
@@ -1243,7 +1246,7 @@ static inline int bfin_spi_stop_queue(struct master_data *drv_data)
return
status
;
}
static
inline
int
bfin_spi_destroy_queue
(
struct
master_data
*
drv_data
)
static
inline
int
bfin_spi_destroy_queue
(
struct
bfin_spi_
master_data
*
drv_data
)
{
int
status
;
...
...
@@ -1261,7 +1264,7 @@ static int __init bfin_spi_probe(struct platform_device *pdev)
struct
device
*
dev
=
&
pdev
->
dev
;
struct
bfin5xx_spi_master
*
platform_info
;
struct
spi_master
*
master
;
struct
master_data
*
drv_data
;
struct
bfin_spi_
master_data
*
drv_data
;
struct
resource
*
res
;
int
status
=
0
;
...
...
@@ -1371,7 +1374,7 @@ static int __init bfin_spi_probe(struct platform_device *pdev)
/* stop hardware and remove the driver */
static
int
__devexit
bfin_spi_remove
(
struct
platform_device
*
pdev
)
{
struct
master_data
*
drv_data
=
platform_get_drvdata
(
pdev
);
struct
bfin_spi_
master_data
*
drv_data
=
platform_get_drvdata
(
pdev
);
int
status
=
0
;
if
(
!
drv_data
)
...
...
@@ -1410,7 +1413,7 @@ static int __devexit bfin_spi_remove(struct platform_device *pdev)
#ifdef CONFIG_PM
static
int
bfin_spi_suspend
(
struct
platform_device
*
pdev
,
pm_message_t
state
)
{
struct
master_data
*
drv_data
=
platform_get_drvdata
(
pdev
);
struct
bfin_spi_
master_data
*
drv_data
=
platform_get_drvdata
(
pdev
);
int
status
=
0
;
status
=
bfin_spi_stop_queue
(
drv_data
);
...
...
@@ -1431,7 +1434,7 @@ static int bfin_spi_suspend(struct platform_device *pdev, pm_message_t state)
static
int
bfin_spi_resume
(
struct
platform_device
*
pdev
)
{
struct
master_data
*
drv_data
=
platform_get_drvdata
(
pdev
);
struct
bfin_spi_
master_data
*
drv_data
=
platform_get_drvdata
(
pdev
);
int
status
=
0
;
write_CTRL
(
drv_data
,
drv_data
->
ctrl_reg
);
...
...
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