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
45ce1d23
Commit
45ce1d23
authored
Apr 13, 2017
by
Thierry Reding
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-4.11/fixes' into for-next
parents
c1ae3cfa
a900152b
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
57 additions
and
14 deletions
+57
-14
drivers/pwm/pwm-lpss-pci.c
drivers/pwm/pwm-lpss-pci.c
+9
-1
drivers/pwm/pwm-lpss-platform.c
drivers/pwm/pwm-lpss-platform.c
+1
-0
drivers/pwm/pwm-lpss.c
drivers/pwm/pwm-lpss.c
+13
-6
drivers/pwm/pwm-lpss.h
drivers/pwm/pwm-lpss.h
+1
-0
drivers/pwm/pwm-rockchip.c
drivers/pwm/pwm-rockchip.c
+33
-7
No files found.
drivers/pwm/pwm-lpss-pci.c
View file @
45ce1d23
...
...
@@ -36,6 +36,14 @@ static const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = {
.
clk_rate
=
19200000
,
.
npwm
=
4
,
.
base_unit_bits
=
22
,
.
bypass
=
true
,
};
/* Tangier */
static
const
struct
pwm_lpss_boardinfo
pwm_lpss_tng_info
=
{
.
clk_rate
=
19200000
,
.
npwm
=
4
,
.
base_unit_bits
=
22
,
};
static
int
pwm_lpss_probe_pci
(
struct
pci_dev
*
pdev
,
...
...
@@ -97,7 +105,7 @@ static const struct pci_device_id pwm_lpss_pci_ids[] = {
{
PCI_VDEVICE
(
INTEL
,
0x0ac8
),
(
unsigned
long
)
&
pwm_lpss_bxt_info
},
{
PCI_VDEVICE
(
INTEL
,
0x0f08
),
(
unsigned
long
)
&
pwm_lpss_byt_info
},
{
PCI_VDEVICE
(
INTEL
,
0x0f09
),
(
unsigned
long
)
&
pwm_lpss_byt_info
},
{
PCI_VDEVICE
(
INTEL
,
0x11a5
),
(
unsigned
long
)
&
pwm_lpss_
bxt
_info
},
{
PCI_VDEVICE
(
INTEL
,
0x11a5
),
(
unsigned
long
)
&
pwm_lpss_
tng
_info
},
{
PCI_VDEVICE
(
INTEL
,
0x1ac8
),
(
unsigned
long
)
&
pwm_lpss_bxt_info
},
{
PCI_VDEVICE
(
INTEL
,
0x2288
),
(
unsigned
long
)
&
pwm_lpss_bsw_info
},
{
PCI_VDEVICE
(
INTEL
,
0x2289
),
(
unsigned
long
)
&
pwm_lpss_bsw_info
},
...
...
drivers/pwm/pwm-lpss-platform.c
View file @
45ce1d23
...
...
@@ -37,6 +37,7 @@ static const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = {
.
clk_rate
=
19200000
,
.
npwm
=
4
,
.
base_unit_bits
=
22
,
.
bypass
=
true
,
};
static
int
pwm_lpss_probe_platform
(
struct
platform_device
*
pdev
)
...
...
drivers/pwm/pwm-lpss.c
View file @
45ce1d23
...
...
@@ -57,7 +57,7 @@ static inline void pwm_lpss_write(const struct pwm_device *pwm, u32 value)
writel
(
value
,
lpwm
->
regs
+
pwm
->
hwpwm
*
PWM_SIZE
+
PWM
);
}
static
int
pwm_lpss_update
(
struct
pwm_device
*
pwm
)
static
int
pwm_lpss_
wait_for_
update
(
struct
pwm_device
*
pwm
)
{
struct
pwm_lpss_chip
*
lpwm
=
to_lpwm
(
pwm
->
chip
);
const
void
__iomem
*
addr
=
lpwm
->
regs
+
pwm
->
hwpwm
*
PWM_SIZE
+
PWM
;
...
...
@@ -65,8 +65,6 @@ static int pwm_lpss_update(struct pwm_device *pwm)
u32
val
;
int
err
;
pwm_lpss_write
(
pwm
,
pwm_lpss_read
(
pwm
)
|
PWM_SW_UPDATE
);
/*
* PWM Configuration register has SW_UPDATE bit that is set when a new
* configuration is written to the register. The bit is automatically
...
...
@@ -122,6 +120,12 @@ static void pwm_lpss_prepare(struct pwm_lpss_chip *lpwm, struct pwm_device *pwm,
pwm_lpss_write
(
pwm
,
ctrl
);
}
static
inline
void
pwm_lpss_cond_enable
(
struct
pwm_device
*
pwm
,
bool
cond
)
{
if
(
cond
)
pwm_lpss_write
(
pwm
,
pwm_lpss_read
(
pwm
)
|
PWM_ENABLE
);
}
static
int
pwm_lpss_apply
(
struct
pwm_chip
*
chip
,
struct
pwm_device
*
pwm
,
struct
pwm_state
*
state
)
{
...
...
@@ -137,18 +141,21 @@ static int pwm_lpss_apply(struct pwm_chip *chip, struct pwm_device *pwm,
return
ret
;
}
pwm_lpss_prepare
(
lpwm
,
pwm
,
state
->
duty_cycle
,
state
->
period
);
ret
=
pwm_lpss_update
(
pwm
);
pwm_lpss_write
(
pwm
,
pwm_lpss_read
(
pwm
)
|
PWM_SW_UPDATE
);
pwm_lpss_cond_enable
(
pwm
,
lpwm
->
info
->
bypass
==
false
);
ret
=
pwm_lpss_wait_for_update
(
pwm
);
if
(
ret
)
{
pm_runtime_put
(
chip
->
dev
);
return
ret
;
}
pwm_lpss_
write
(
pwm
,
pwm_lpss_read
(
pwm
)
|
PWM_ENABLE
);
pwm_lpss_
cond_enable
(
pwm
,
lpwm
->
info
->
bypass
==
true
);
}
else
{
ret
=
pwm_lpss_is_updating
(
pwm
);
if
(
ret
)
return
ret
;
pwm_lpss_prepare
(
lpwm
,
pwm
,
state
->
duty_cycle
,
state
->
period
);
return
pwm_lpss_update
(
pwm
);
pwm_lpss_write
(
pwm
,
pwm_lpss_read
(
pwm
)
|
PWM_SW_UPDATE
);
return
pwm_lpss_wait_for_update
(
pwm
);
}
}
else
if
(
pwm_is_enabled
(
pwm
))
{
pwm_lpss_write
(
pwm
,
pwm_lpss_read
(
pwm
)
&
~
PWM_ENABLE
);
...
...
drivers/pwm/pwm-lpss.h
View file @
45ce1d23
...
...
@@ -22,6 +22,7 @@ struct pwm_lpss_boardinfo {
unsigned
long
clk_rate
;
unsigned
int
npwm
;
unsigned
long
base_unit_bits
;
bool
bypass
;
};
struct
pwm_lpss_chip
*
pwm_lpss_probe
(
struct
device
*
dev
,
struct
resource
*
r
,
...
...
drivers/pwm/pwm-rockchip.c
View file @
45ce1d23
...
...
@@ -191,6 +191,28 @@ static int rockchip_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
return
0
;
}
static
int
rockchip_pwm_enable
(
struct
pwm_chip
*
chip
,
struct
pwm_device
*
pwm
,
bool
enable
,
enum
pwm_polarity
polarity
)
{
struct
rockchip_pwm_chip
*
pc
=
to_rockchip_pwm_chip
(
chip
);
int
ret
;
if
(
enable
)
{
ret
=
clk_enable
(
pc
->
clk
);
if
(
ret
)
return
ret
;
}
pc
->
data
->
set_enable
(
chip
,
pwm
,
enable
,
polarity
);
if
(
!
enable
)
clk_disable
(
pc
->
clk
);
return
0
;
}
static
int
rockchip_pwm_apply
(
struct
pwm_chip
*
chip
,
struct
pwm_device
*
pwm
,
struct
pwm_state
*
state
)
{
...
...
@@ -207,22 +229,26 @@ static int rockchip_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
return
ret
;
if
(
state
->
polarity
!=
curstate
.
polarity
&&
enabled
)
{
pc
->
data
->
set_enable
(
chip
,
pwm
,
false
,
state
->
polarity
);
ret
=
rockchip_pwm_enable
(
chip
,
pwm
,
false
,
state
->
polarity
);
if
(
ret
)
goto
out
;
enabled
=
false
;
}
ret
=
rockchip_pwm_config
(
chip
,
pwm
,
state
->
duty_cycle
,
state
->
period
);
if
(
ret
)
{
if
(
enabled
!=
curstate
.
enabled
)
pc
->
data
->
set_enable
(
chip
,
pwm
,
!
enabled
,
state
->
polarity
);
rockchip_pwm_enable
(
chip
,
pwm
,
!
enabled
,
state
->
polarity
);
goto
out
;
}
if
(
state
->
enabled
!=
enabled
)
pc
->
data
->
set_enable
(
chip
,
pwm
,
state
->
enabled
,
state
->
polarity
);
if
(
state
->
enabled
!=
enabled
)
{
ret
=
rockchip_pwm_enable
(
chip
,
pwm
,
state
->
enabled
,
state
->
polarity
);
if
(
ret
)
goto
out
;
}
/*
* Update the state with the real hardware, which can differ a bit
...
...
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