Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
linux-seco-imx
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Iterations
Jira
Code
Merge requests
15
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Clea OS
bsp
nxp
linux-seco-imx
Commits
13493f42
Commit
13493f42
authored
3 years ago
by
Davide Cardillo
Browse files
Options
Downloads
Patches
Plain Diff
[i.MX6][CPLD][driver/seco] Add driver v2.0 for SECO CPLD LPC/GPIO
parent
bc336972
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
drivers/seco/cpld.c
+4
-4
4 additions, 4 deletions
drivers/seco/cpld.c
drivers/seco/pwm_cpld.c
+9
-13
9 additions, 13 deletions
drivers/seco/pwm_cpld.c
include/linux/seco_cpld.h
+1
-1
1 addition, 1 deletion
include/linux/seco_cpld.h
with
14 additions
and
18 deletions
drivers/seco/cpld.c
+
4
−
4
View file @
13493f42
...
...
@@ -41,7 +41,7 @@ void cpld_reg_write (unsigned int addr, uint16_t value) {
void
cpld_read
(
unsigned
int
addr
,
uint16_t
*
data
)
{
*
data
=
readw
(
WEIM_ADDR
(
addr
<<
1
));
*
data
=
__raw_
readw
(
WEIM_ADDR
(
addr
<<
1
));
}
...
...
@@ -97,7 +97,7 @@ void dump_reg (void) {
#define CPLD_NAME "CPLD_device"
int
__cpld_init
(
struct
device_node
*
dp
,
struct
resource
*
resource
)
{
int
__cpld_init
(
struct
device
*
dev
,
struct
device_node
*
dp
,
struct
resource
*
resource
)
{
uint16_t
rev
=
0
;
int
err
=
0
;
...
...
@@ -134,7 +134,7 @@ int __cpld_init (struct device_node *dp, struct resource *resource) {
cpld_d
->
name
=
CPLD_NAME
;
cpld_d
->
mem_addr_base
=
resource
[
0
].
start
;
cpld_d
->
mem_size
=
resource_size
(
&
resource
[
0
]);
cpld_d
->
virt
=
ioremap
_cache
(
cpld_d
->
mem_addr_base
,
cpld_d
->
mem_size
);
cpld_d
->
virt
=
devm_
ioremap
(
dev
,
cpld_d
->
mem_addr_base
,
cpld_d
->
mem_size
);
if
(
cpld_d
->
virt
==
NULL
)
{
CPLD_ERR
(
"Failed to ioremap seco CPLD region"
);
err
=
-
EIO
;
...
...
@@ -248,7 +248,7 @@ static int cpld_probe (struct platform_device *pdev) {
int
error
=
0
;
int
registred
;
__cpld_init
(
dp
,
&
res
);
__cpld_init
(
&
pdev
->
dev
,
dp
,
&
res
);
registred
=
clpd_client_register
(
dp
,
&
pdev
->
dev
);
if
(
registred
)
...
...
This diff is collapsed.
Click to expand it.
drivers/seco/pwm_cpld.c
+
9
−
13
View file @
13493f42
...
...
@@ -127,8 +127,6 @@ static int cpwm_apply( struct pwm_chip *chip, struct pwm_device *pwm,
unsigned
long
long
period_cycles
,
duty_cycles
,
prescale
;
struct
cpwm_chip
*
cpwm
=
to_cpwm_chip
(
chip
);
struct
pwm_state
cstate
;
unsigned
long
long
clk1
;
unsigned
long
long
nclk
;
uint16_t
reg_value
;
pwm_get_state
(
pwm
,
&
cstate
);
...
...
@@ -136,18 +134,16 @@ static int cpwm_apply( struct pwm_chip *chip, struct pwm_device *pwm,
prescale
=
0
;
do
{
clk1
=
(
MAIN_CLK
>>
1
);
do_div
(
clk1
,
(
prescale
+
1
));
nclk
=
state
->
period
*
clk1
;
do_div
(
nclk
,
1000000000
);
nclk
--
;
period_cycles
=
(
MAIN_CLK
>>
1
);
do_div
(
period_cycles
,
(
prescale
+
1
));
do_div
(
period_cycles
,
state
->
period
);
period_cycles
--
;
prescale
++
;
}
while
(
nclk
&
~
((
unsigned
long
long
)
0xFFFF
));
}
while
(
period_cycles
&
~
((
unsigned
long
long
)
0xFFFF
));
prescale
--
;
period_cycles
=
nclk
;
duty_cycles
=
nclk
*
state
->
duty_cycle
;
do_div
(
duty_cycles
,
100
);
duty_cycles
=
state
->
duty_cycle
*
period_cycles
;
do_div
(
duty_cycles
,
state
->
period
);
cpwm_writeb
(
cpwm
->
reg_map
.
PWM_REG_PERIOD
,
period_cycles
&
PWM_MASK_PERIOD
);
cpwm_writeb
(
cpwm
->
reg_map
.
PWM_REG_DUTY
,
duty_cycles
&
PWM_MASK_DUTY
);
...
...
@@ -156,7 +152,7 @@ static int cpwm_apply( struct pwm_chip *chip, struct pwm_device *pwm,
}
else
{
cpwm_pol_inv
(
chip
);
}
cpwm_pol_inv
(
chip
);
cpwm_pol_inv
(
chip
);
cpwm_readb
(
cpwm
->
reg_map
.
PWM_REG_PRESCALE
,
&
reg_value
);
cpwm_writeb
(
cpwm
->
reg_map
.
PWM_REG_PRESCALE
,
reg_value
|
(
PWM_MASK_PRESCALE
&
(
~
PWM_MASK_PRESCALE
|
prescale
)));
...
...
This diff is collapsed.
Click to expand it.
include/linux/seco_cpld.h
+
1
−
1
View file @
13493f42
...
...
@@ -47,7 +47,7 @@ extern void cpld_write (unsigned int addr, uint16_t value);
extern
int
cpld_get_membase
(
void
);
extern
int
__cpld_init
(
struct
device_node
*
dp
,
struct
resource
*
resource
);
extern
int
__cpld_init
(
struct
device
*
dev
,
struct
device_node
*
dp
,
struct
resource
*
resource
);
extern
int
cpld_get_revision
(
void
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment