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
nexedi
linux
Commits
dde3ada3
Commit
dde3ada3
authored
Oct 01, 2012
by
Dmitry Torokhov
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next' into for-linus
Prepare first set of updates for 3.7 merge window.
parents
5e056ef4
fb4f552e
Changes
22
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
587 additions
and
279 deletions
+587
-279
Documentation/devicetree/bindings/input/gpio-keys-polled.txt
Documentation/devicetree/bindings/input/gpio-keys-polled.txt
+38
-0
Documentation/devicetree/bindings/input/rotary-encoder.txt
Documentation/devicetree/bindings/input/rotary-encoder.txt
+36
-0
drivers/input/apm-power.c
drivers/input/apm-power.c
+1
-1
drivers/input/ff-core.c
drivers/input/ff-core.c
+2
-2
drivers/input/ff-memless.c
drivers/input/ff-memless.c
+8
-6
drivers/input/input.c
drivers/input/input.c
+26
-17
drivers/input/joydev.c
drivers/input/joydev.c
+1
-1
drivers/input/keyboard/gpio_keys.c
drivers/input/keyboard/gpio_keys.c
+88
-81
drivers/input/keyboard/gpio_keys_polled.c
drivers/input/keyboard/gpio_keys_polled.c
+135
-12
drivers/input/keyboard/omap-keypad.c
drivers/input/keyboard/omap-keypad.c
+4
-4
drivers/input/keyboard/samsung-keypad.c
drivers/input/keyboard/samsung-keypad.c
+3
-7
drivers/input/keyboard/tegra-kbc.c
drivers/input/keyboard/tegra-kbc.c
+1
-1
drivers/input/misc/rotary_encoder.c
drivers/input/misc/rotary_encoder.c
+94
-46
drivers/input/misc/twl4030-pwrbutton.c
drivers/input/misc/twl4030-pwrbutton.c
+1
-0
drivers/input/misc/uinput.c
drivers/input/misc/uinput.c
+123
-74
drivers/input/mouse/hgpk.c
drivers/input/mouse/hgpk.c
+3
-6
drivers/input/mousedev.c
drivers/input/mousedev.c
+4
-5
drivers/input/sparse-keymap.c
drivers/input/sparse-keymap.c
+2
-2
drivers/input/touchscreen/s3c2410_ts.c
drivers/input/touchscreen/s3c2410_ts.c
+1
-1
fs/compat_ioctl.c
fs/compat_ioctl.c
+2
-0
include/linux/input/tegra_kbc.h
include/linux/input/tegra_kbc.h
+0
-0
include/linux/uinput.h
include/linux/uinput.h
+14
-13
No files found.
Documentation/devicetree/bindings/input/gpio-keys-polled.txt
0 → 100644
View file @
dde3ada3
Device-Tree bindings for input/gpio_keys_polled.c keyboard driver
Required properties:
- compatible = "gpio-keys-polled";
- poll-interval: Poll interval time in milliseconds
Optional properties:
- autorepeat: Boolean, Enable auto repeat feature of Linux input
subsystem.
Each button (key) is represented as a sub-node of "gpio-keys-polled":
Subnode properties:
- gpios: OF device-tree gpio specification.
- label: Descriptive name of the key.
- linux,code: Keycode to emit.
Optional subnode-properties:
- linux,input-type: Specify event type this button/key generates.
If not specified defaults to <1> == EV_KEY.
- debounce-interval: Debouncing interval time in milliseconds.
If not specified defaults to 5.
- gpio-key,wakeup: Boolean, button can wake-up the system.
Example nodes:
gpio_keys_polled {
compatible = "gpio-keys-polled";
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <100>;
autorepeat;
button@21 {
label = "GPIO Key UP";
linux,code = <103>;
gpios = <&gpio1 0 1>;
};
...
Documentation/devicetree/bindings/input/rotary-encoder.txt
0 → 100644
View file @
dde3ada3
Rotary encoder DT bindings
Required properties:
- gpios: a spec for two GPIOs to be used
Optional properties:
- linux,axis: the input subsystem axis to map to this rotary encoder.
Defaults to 0 (ABS_X / REL_X)
- rotary-encoder,steps: Number of steps in a full turnaround of the
encoder. Only relevant for absolute axis. Defaults to 24 which is a
typical value for such devices.
- rotary-encoder,relative-axis: register a relative axis rather than an
absolute one. Relative axis will only generate +1/-1 events on the input
device, hence no steps need to be passed.
- rotary-encoder,rollover: Automatic rollove when the rotary value becomes
greater than the specified steps or smaller than 0. For absolute axis only.
- rotary-encoder,half-period: Makes the driver work on half-period mode.
See Documentation/input/rotary-encoder.txt for more information.
Example:
rotary@0 {
compatible = "rotary-encoder";
gpios = <&gpio 19 1>, <&gpio 20 0>; /* GPIO19 is inverted */
linux,axis = <0>; /* REL_X */
rotary-encoder,relative-axis;
};
rotary@1 {
compatible = "rotary-encoder";
gpios = <&gpio 21 0>, <&gpio 22 0>;
linux,axis = <1>; /* ABS_Y */
rotary-encoder,steps = <24>;
rotary-encoder,rollover;
};
drivers/input/apm-power.c
View file @
dde3ada3
drivers/input/ff-core.c
View file @
dde3ada3
drivers/input/ff-memless.c
View file @
dde3ada3
...
...
@@ -74,8 +74,10 @@ static const struct ff_envelope *get_envelope(const struct ff_effect *effect)
switch
(
effect
->
type
)
{
case
FF_PERIODIC
:
return
&
effect
->
u
.
periodic
.
envelope
;
case
FF_CONSTANT
:
return
&
effect
->
u
.
constant
.
envelope
;
default:
return
&
empty_envelope
;
}
...
...
drivers/input/input.c
View file @
dde3ada3
...
...
@@ -844,18 +844,10 @@ int input_set_keycode(struct input_dev *dev,
}
EXPORT_SYMBOL
(
input_set_keycode
);
#define MATCH_BIT(bit, max) \
for (i = 0; i < BITS_TO_LONGS(max); i++) \
if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \
break; \
if (i != BITS_TO_LONGS(max)) \
continue;
static
const
struct
input_device_id
*
input_match_device
(
struct
input_handler
*
handler
,
struct
input_dev
*
dev
)
{
const
struct
input_device_id
*
id
;
int
i
;
for
(
id
=
handler
->
id_table
;
id
->
flags
||
id
->
driver_info
;
id
++
)
{
...
...
@@ -875,15 +867,32 @@ static const struct input_device_id *input_match_device(struct input_handler *ha
if
(
id
->
version
!=
dev
->
id
.
version
)
continue
;
MATCH_BIT
(
evbit
,
EV_MAX
);
MATCH_BIT
(
keybit
,
KEY_MAX
);
MATCH_BIT
(
relbit
,
REL_MAX
);
MATCH_BIT
(
absbit
,
ABS_MAX
);
MATCH_BIT
(
mscbit
,
MSC_MAX
);
MATCH_BIT
(
ledbit
,
LED_MAX
);
MATCH_BIT
(
sndbit
,
SND_MAX
);
MATCH_BIT
(
ffbit
,
FF_MAX
);
MATCH_BIT
(
swbit
,
SW_MAX
);
if
(
!
bitmap_subset
(
id
->
evbit
,
dev
->
evbit
,
EV_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
keybit
,
dev
->
keybit
,
KEY_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
relbit
,
dev
->
relbit
,
REL_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
absbit
,
dev
->
absbit
,
ABS_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
mscbit
,
dev
->
mscbit
,
MSC_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
ledbit
,
dev
->
ledbit
,
LED_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
sndbit
,
dev
->
sndbit
,
SND_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
ffbit
,
dev
->
ffbit
,
FF_MAX
))
continue
;
if
(
!
bitmap_subset
(
id
->
swbit
,
dev
->
swbit
,
SW_MAX
))
continue
;
if
(
!
handler
->
match
||
handler
->
match
(
handler
,
dev
))
return
id
;
...
...
drivers/input/joydev.c
View file @
dde3ada3
...
...
@@ -711,7 +711,7 @@ static long joydev_ioctl(struct file *file,
case
JS_SET_ALL
:
retval
=
copy_from_user
(
&
joydev
->
glue
,
argp
,
sizeof
(
joydev
->
glue
))
?
-
EFAULT
:
0
;
sizeof
(
joydev
->
glue
))
?
-
EFAULT
:
0
;
break
;
case
JS_GET_ALL
:
...
...
drivers/input/keyboard/gpio_keys.c
View file @
dde3ada3
...
...
@@ -43,11 +43,9 @@ struct gpio_button_data {
};
struct
gpio_keys_drvdata
{
const
struct
gpio_keys_platform_data
*
pdata
;
struct
input_dev
*
input
;
struct
mutex
disable_lock
;
unsigned
int
n_buttons
;
int
(
*
enable
)(
struct
device
*
dev
);
void
(
*
disable
)(
struct
device
*
dev
);
struct
gpio_button_data
data
[
0
];
};
...
...
@@ -171,7 +169,7 @@ static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata,
if
(
!
bits
)
return
-
ENOMEM
;
for
(
i
=
0
;
i
<
ddata
->
n_
buttons
;
i
++
)
{
for
(
i
=
0
;
i
<
ddata
->
pdata
->
n
buttons
;
i
++
)
{
struct
gpio_button_data
*
bdata
=
&
ddata
->
data
[
i
];
if
(
bdata
->
button
->
type
!=
type
)
...
...
@@ -219,7 +217,7 @@ static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata,
goto
out
;
/* First validate */
for
(
i
=
0
;
i
<
ddata
->
n_
buttons
;
i
++
)
{
for
(
i
=
0
;
i
<
ddata
->
pdata
->
n
buttons
;
i
++
)
{
struct
gpio_button_data
*
bdata
=
&
ddata
->
data
[
i
];
if
(
bdata
->
button
->
type
!=
type
)
...
...
@@ -234,7 +232,7 @@ static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata,
mutex_lock
(
&
ddata
->
disable_lock
);
for
(
i
=
0
;
i
<
ddata
->
n_
buttons
;
i
++
)
{
for
(
i
=
0
;
i
<
ddata
->
pdata
->
n
buttons
;
i
++
)
{
struct
gpio_button_data
*
bdata
=
&
ddata
->
data
[
i
];
if
(
bdata
->
button
->
type
!=
type
)
...
...
@@ -346,6 +344,9 @@ static void gpio_keys_gpio_work_func(struct work_struct *work)
container_of
(
work
,
struct
gpio_button_data
,
work
);
gpio_keys_gpio_report_event
(
bdata
);
if
(
bdata
->
button
->
wakeup
)
pm_relax
(
bdata
->
input
->
dev
.
parent
);
}
static
void
gpio_keys_gpio_timer
(
unsigned
long
_data
)
...
...
@@ -361,6 +362,8 @@ static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id)
BUG_ON
(
irq
!=
bdata
->
irq
);
if
(
bdata
->
button
->
wakeup
)
pm_stay_awake
(
bdata
->
input
->
dev
.
parent
);
if
(
bdata
->
timer_debounce
)
mod_timer
(
&
bdata
->
timer
,
jiffies
+
msecs_to_jiffies
(
bdata
->
timer_debounce
));
...
...
@@ -397,6 +400,9 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
spin_lock_irqsave
(
&
bdata
->
lock
,
flags
);
if
(
!
bdata
->
key_pressed
)
{
if
(
bdata
->
button
->
wakeup
)
pm_wakeup_event
(
bdata
->
input
->
dev
.
parent
,
0
);
input_event
(
input
,
EV_KEY
,
button
->
code
,
1
);
input_sync
(
input
);
...
...
@@ -523,56 +529,64 @@ static int __devinit gpio_keys_setup_key(struct platform_device *pdev,
static
int
gpio_keys_open
(
struct
input_dev
*
input
)
{
struct
gpio_keys_drvdata
*
ddata
=
input_get_drvdata
(
input
);
const
struct
gpio_keys_platform_data
*
pdata
=
ddata
->
pdata
;
return
ddata
->
enable
?
d
data
->
enable
(
input
->
dev
.
parent
)
:
0
;
return
pdata
->
enable
?
p
data
->
enable
(
input
->
dev
.
parent
)
:
0
;
}
static
void
gpio_keys_close
(
struct
input_dev
*
input
)
{
struct
gpio_keys_drvdata
*
ddata
=
input_get_drvdata
(
input
);
const
struct
gpio_keys_platform_data
*
pdata
=
ddata
->
pdata
;
if
(
d
data
->
disable
)
d
data
->
disable
(
input
->
dev
.
parent
);
if
(
p
data
->
disable
)
p
data
->
disable
(
input
->
dev
.
parent
);
}
/*
* Handlers for alternative sources of platform_data
*/
#ifdef CONFIG_OF
/*
* Translate OpenFirmware node properties into platform_data
*/
static
int
gpio_keys_get_devtree_pdata
(
struct
device
*
dev
,
struct
gpio_keys_platform_data
*
pdata
)
static
struct
gpio_keys_platform_data
*
__devinit
gpio_keys_get_devtree_pdata
(
struct
device
*
dev
)
{
struct
device_node
*
node
,
*
pp
;
struct
gpio_keys_platform_data
*
pdata
;
struct
gpio_keys_button
*
button
;
int
error
;
int
nbuttons
;
int
i
;
struct
gpio_keys_button
*
buttons
;
u32
reg
;
node
=
dev
->
of_node
;
if
(
node
==
NULL
)
return
-
ENODEV
;
memset
(
pdata
,
0
,
sizeof
*
pdata
);
if
(
!
node
)
{
error
=
-
ENODEV
;
goto
err_out
;
}
pdata
->
rep
=
!!
of_get_property
(
node
,
"autorepeat"
,
NULL
);
nbuttons
=
of_get_child_count
(
node
);
if
(
nbuttons
==
0
)
{
error
=
-
ENODEV
;
goto
err_out
;
}
/* First count the subnodes */
pp
=
NULL
;
while
((
pp
=
of_get_next_child
(
node
,
pp
)))
pdata
->
nbuttons
++
;
pdata
=
kzalloc
(
sizeof
(
*
pdata
)
+
nbuttons
*
(
sizeof
*
button
),
GFP_KERNEL
);
if
(
!
pdata
)
{
error
=
-
ENOMEM
;
goto
err_out
;
}
if
(
pdata
->
nbuttons
==
0
)
return
-
ENODEV
;
pdata
->
buttons
=
(
struct
gpio_keys_button
*
)(
pdata
+
1
);
pdata
->
nbuttons
=
nbuttons
;
buttons
=
kzalloc
(
pdata
->
nbuttons
*
(
sizeof
*
buttons
),
GFP_KERNEL
);
if
(
!
buttons
)
return
-
ENOMEM
;
pdata
->
rep
=
!!
of_get_property
(
node
,
"autorepeat"
,
NULL
);
pp
=
NULL
;
i
=
0
;
while
((
pp
=
of_get_next_child
(
node
,
pp
))
)
{
for_each_child_of_node
(
node
,
pp
)
{
enum
of_gpio_flags
flags
;
if
(
!
of_find_property
(
pp
,
"gpios"
,
NULL
))
{
...
...
@@ -580,39 +594,42 @@ static int gpio_keys_get_devtree_pdata(struct device *dev,
dev_warn
(
dev
,
"Found button without gpios
\n
"
);
continue
;
}
buttons
[
i
].
gpio
=
of_get_gpio_flags
(
pp
,
0
,
&
flags
);
buttons
[
i
].
active_low
=
flags
&
OF_GPIO_ACTIVE_LOW
;
if
(
of_property_read_u32
(
pp
,
"linux,code"
,
&
reg
))
{
dev_err
(
dev
,
"Button without keycode: 0x%x
\n
"
,
buttons
[
i
].
gpio
);
goto
out_fail
;
}
buttons
[
i
].
code
=
reg
;
button
=
&
pdata
->
buttons
[
i
++
];
buttons
[
i
].
desc
=
of_get_property
(
pp
,
"label"
,
NULL
);
button
->
gpio
=
of_get_gpio_flags
(
pp
,
0
,
&
flags
);
button
->
active_low
=
flags
&
OF_GPIO_ACTIVE_LOW
;
if
(
of_property_read_u32
(
pp
,
"linux,input-type"
,
&
reg
)
==
0
)
buttons
[
i
].
type
=
reg
;
else
buttons
[
i
].
type
=
EV_KEY
;
if
(
of_property_read_u32
(
pp
,
"linux,code"
,
&
button
->
code
))
{
dev_err
(
dev
,
"Button without keycode: 0x%x
\n
"
,
button
->
gpio
);
error
=
-
EINVAL
;
goto
err_free_pdata
;
}
button
s
[
i
].
wakeup
=
!!
of_get_property
(
pp
,
"gpio-key,wakeup
"
,
NULL
);
button
->
desc
=
of_get_property
(
pp
,
"label
"
,
NULL
);
if
(
of_property_read_u32
(
pp
,
"
debounce-interval"
,
&
reg
)
==
0
)
button
s
[
i
].
debounce_interval
=
reg
;
else
buttons
[
i
].
debounce_interval
=
5
;
if
(
of_property_read_u32
(
pp
,
"
linux,input-type"
,
&
button
->
type
)
)
button
->
type
=
EV_KEY
;
button
->
wakeup
=
!!
of_get_property
(
pp
,
"gpio-key,wakeup"
,
NULL
)
;
i
++
;
if
(
of_property_read_u32
(
pp
,
"debounce-interval"
,
&
button
->
debounce_interval
))
button
->
debounce_interval
=
5
;
}
pdata
->
buttons
=
buttons
;
if
(
pdata
->
nbuttons
==
0
)
{
error
=
-
EINVAL
;
goto
err_free_pdata
;
}
return
0
;
return
pdata
;
out_fail:
kfree
(
buttons
);
return
-
ENODEV
;
err_free_pdata:
kfree
(
pdata
);
err_out:
return
ERR_PTR
(
error
);
}
static
struct
of_device_id
gpio_keys_of_match
[]
=
{
...
...
@@ -623,14 +640,12 @@ MODULE_DEVICE_TABLE(of, gpio_keys_of_match);
#else
static
in
t
gpio_keys_get_devtree_pdata
(
struct
device
*
dev
,
struct
gpio_keys_platform_data
*
altp
)
static
in
line
struct
gpio_keys_platform_data
*
gpio_keys_get_devtree_pdata
(
struct
device
*
dev
)
{
return
-
ENODEV
;
return
ERR_PTR
(
-
ENODEV
)
;
}
#define gpio_keys_of_match NULL
#endif
static
void
gpio_remove_key
(
struct
gpio_button_data
*
bdata
)
...
...
@@ -645,19 +660,17 @@ static void gpio_remove_key(struct gpio_button_data *bdata)
static
int
__devinit
gpio_keys_probe
(
struct
platform_device
*
pdev
)
{
const
struct
gpio_keys_platform_data
*
pdata
=
pdev
->
dev
.
platform_data
;
struct
gpio_keys_drvdata
*
ddata
;
struct
device
*
dev
=
&
pdev
->
dev
;
struct
gpio_keys_platform_data
alt_pdata
;
const
struct
gpio_keys_platform_data
*
pdata
=
dev_get_platdata
(
dev
);
struct
gpio_keys_drvdata
*
ddata
;
struct
input_dev
*
input
;
int
i
,
error
;
int
wakeup
=
0
;
if
(
!
pdata
)
{
error
=
gpio_keys_get_devtree_pdata
(
dev
,
&
alt_pdata
);
if
(
error
)
return
error
;
pdata
=
&
alt_pdata
;
pdata
=
gpio_keys_get_devtree_pdata
(
dev
);
if
(
IS_ERR
(
pdata
))
return
PTR_ERR
(
pdata
);
}
ddata
=
kzalloc
(
sizeof
(
struct
gpio_keys_drvdata
)
+
...
...
@@ -670,10 +683,8 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
goto
fail1
;
}
ddata
->
pdata
=
pdata
;
ddata
->
input
=
input
;
ddata
->
n_buttons
=
pdata
->
nbuttons
;
ddata
->
enable
=
pdata
->
enable
;
ddata
->
disable
=
pdata
->
disable
;
mutex_init
(
&
ddata
->
disable_lock
);
platform_set_drvdata
(
pdev
,
ddata
);
...
...
@@ -742,9 +753,9 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
fail1:
input_free_device
(
input
);
kfree
(
ddata
);
/* If we have no platform
_data, we allocated buttons
dynamically. */
if
(
!
pdev
->
dev
.
platform_data
)
kfree
(
pdata
->
buttons
);
/* If we have no platform
data, we allocated pdata
dynamically. */
if
(
!
dev_get_platdata
(
&
pdev
->
dev
)
)
kfree
(
pdata
);
return
error
;
}
...
...
@@ -759,18 +770,14 @@ static int __devexit gpio_keys_remove(struct platform_device *pdev)
device_init_wakeup
(
&
pdev
->
dev
,
0
);
for
(
i
=
0
;
i
<
ddata
->
n_
buttons
;
i
++
)
for
(
i
=
0
;
i
<
ddata
->
pdata
->
n
buttons
;
i
++
)
gpio_remove_key
(
&
ddata
->
data
[
i
]);
input_unregister_device
(
input
);
/*
* If we had no platform_data, we allocated buttons dynamically, and
* must free them here. ddata->data[0].button is the pointer to the
* beginning of the allocated array.
*/
if
(
!
pdev
->
dev
.
platform_data
)
kfree
(
ddata
->
data
[
0
].
button
);
/* If we have no platform data, we allocated pdata dynamically. */
if
(
!
dev_get_platdata
(
&
pdev
->
dev
))
kfree
(
ddata
->
pdata
);
kfree
(
ddata
);
...
...
@@ -784,7 +791,7 @@ static int gpio_keys_suspend(struct device *dev)
int
i
;
if
(
device_may_wakeup
(
dev
))
{
for
(
i
=
0
;
i
<
ddata
->
n_
buttons
;
i
++
)
{
for
(
i
=
0
;
i
<
ddata
->
pdata
->
n
buttons
;
i
++
)
{
struct
gpio_button_data
*
bdata
=
&
ddata
->
data
[
i
];
if
(
bdata
->
button
->
wakeup
)
enable_irq_wake
(
bdata
->
irq
);
...
...
@@ -799,7 +806,7 @@ static int gpio_keys_resume(struct device *dev)
struct
gpio_keys_drvdata
*
ddata
=
dev_get_drvdata
(
dev
);
int
i
;
for
(
i
=
0
;
i
<
ddata
->
n_
buttons
;
i
++
)
{
for
(
i
=
0
;
i
<
ddata
->
pdata
->
n
buttons
;
i
++
)
{
struct
gpio_button_data
*
bdata
=
&
ddata
->
data
[
i
];
if
(
bdata
->
button
->
wakeup
&&
device_may_wakeup
(
dev
))
disable_irq_wake
(
bdata
->
irq
);
...
...
@@ -822,7 +829,7 @@ static struct platform_driver gpio_keys_device_driver = {
.
name
=
"gpio-keys"
,
.
owner
=
THIS_MODULE
,
.
pm
=
&
gpio_keys_pm_ops
,
.
of_match_table
=
gpio_keys_of_match
,
.
of_match_table
=
of_match_ptr
(
gpio_keys_of_match
)
,
}
};
...
...
drivers/input/keyboard/gpio_keys_polled.c
View file @
dde3ada3
...
...
@@ -25,6 +25,8 @@
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/gpio_keys.h>
#include <linux/of_platform.h>
#include <linux/of_gpio.h>
#define DRV_NAME "gpio-keys-polled"
...
...
@@ -38,7 +40,7 @@ struct gpio_keys_button_data {
struct
gpio_keys_polled_dev
{
struct
input_polled_dev
*
poll_dev
;
struct
device
*
dev
;
struct
gpio_keys_platform_data
*
pdata
;
const
struct
gpio_keys_platform_data
*
pdata
;
struct
gpio_keys_button_data
data
[
0
];
};
...
...
@@ -67,11 +69,11 @@ static void gpio_keys_polled_check_state(struct input_dev *input,
static
void
gpio_keys_polled_poll
(
struct
input_polled_dev
*
dev
)
{
struct
gpio_keys_polled_dev
*
bdev
=
dev
->
private
;
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
const
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
struct
input_dev
*
input
=
dev
->
input
;
int
i
;
for
(
i
=
0
;
i
<
bdev
->
pdata
->
nbuttons
;
i
++
)
{
for
(
i
=
0
;
i
<
pdata
->
nbuttons
;
i
++
)
{
struct
gpio_keys_button_data
*
bdata
=
&
bdev
->
data
[
i
];
if
(
bdata
->
count
<
bdata
->
threshold
)
...
...
@@ -85,7 +87,7 @@ static void gpio_keys_polled_poll(struct input_polled_dev *dev)
static
void
gpio_keys_polled_open
(
struct
input_polled_dev
*
dev
)
{
struct
gpio_keys_polled_dev
*
bdev
=
dev
->
private
;
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
const
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
if
(
pdata
->
enable
)
pdata
->
enable
(
bdev
->
dev
);
...
...
@@ -94,31 +96,139 @@ static void gpio_keys_polled_open(struct input_polled_dev *dev)
static
void
gpio_keys_polled_close
(
struct
input_polled_dev
*
dev
)
{
struct
gpio_keys_polled_dev
*
bdev
=
dev
->
private
;
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
const
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
if
(
pdata
->
disable
)
pdata
->
disable
(
bdev
->
dev
);
}
#ifdef CONFIG_OF
static
struct
gpio_keys_platform_data
*
__devinit
gpio_keys_polled_get_devtree_pdata
(
struct
device
*
dev
)
{
struct
device_node
*
node
,
*
pp
;
struct
gpio_keys_platform_data
*
pdata
;
struct
gpio_keys_button
*
button
;
int
error
;
int
nbuttons
;
int
i
;
node
=
dev
->
of_node
;
if
(
!
node
)
return
NULL
;
nbuttons
=
of_get_child_count
(
node
);
if
(
nbuttons
==
0
)
return
NULL
;
pdata
=
kzalloc
(
sizeof
(
*
pdata
)
+
nbuttons
*
(
sizeof
*
button
),
GFP_KERNEL
);
if
(
!
pdata
)
{
error
=
-
ENOMEM
;
goto
err_out
;
}
pdata
->
buttons
=
(
struct
gpio_keys_button
*
)(
pdata
+
1
);
pdata
->
nbuttons
=
nbuttons
;
pdata
->
rep
=
!!
of_get_property
(
node
,
"autorepeat"
,
NULL
);
of_property_read_u32
(
node
,
"poll-interval"
,
&
pdata
->
poll_interval
);
i
=
0
;
for_each_child_of_node
(
node
,
pp
)
{
enum
of_gpio_flags
flags
;
if
(
!
of_find_property
(
pp
,
"gpios"
,
NULL
))
{
pdata
->
nbuttons
--
;
dev_warn
(
dev
,
"Found button without gpios
\n
"
);
continue
;
}
button
=
&
pdata
->
buttons
[
i
++
];
button
->
gpio
=
of_get_gpio_flags
(
pp
,
0
,
&
flags
);
button
->
active_low
=
flags
&
OF_GPIO_ACTIVE_LOW
;
if
(
of_property_read_u32
(
pp
,
"linux,code"
,
&
button
->
code
))
{
dev_err
(
dev
,
"Button without keycode: 0x%x
\n
"
,
button
->
gpio
);
error
=
-
EINVAL
;
goto
err_free_pdata
;
}
button
->
desc
=
of_get_property
(
pp
,
"label"
,
NULL
);
if
(
of_property_read_u32
(
pp
,
"linux,input-type"
,
&
button
->
type
))
button
->
type
=
EV_KEY
;
button
->
wakeup
=
!!
of_get_property
(
pp
,
"gpio-key,wakeup"
,
NULL
);
if
(
of_property_read_u32
(
pp
,
"debounce-interval"
,
&
button
->
debounce_interval
))
button
->
debounce_interval
=
5
;
}
if
(
pdata
->
nbuttons
==
0
)
{
error
=
-
EINVAL
;
goto
err_free_pdata
;
}
return
pdata
;
err_free_pdata:
kfree
(
pdata
);
err_out:
return
ERR_PTR
(
error
);
}
static
struct
of_device_id
gpio_keys_polled_of_match
[]
=
{
{
.
compatible
=
"gpio-keys-polled"
,
},
{
},
};
MODULE_DEVICE_TABLE
(
of
,
gpio_keys_polled_of_match
);
#else
static
inline
struct
gpio_keys_platform_data
*
gpio_keys_polled_get_devtree_pdata
(
struct
device
*
dev
)
{
return
NULL
;
}
#endif
static
int
__devinit
gpio_keys_polled_probe
(
struct
platform_device
*
pdev
)
{
struct
gpio_keys_platform_data
*
pdata
=
pdev
->
dev
.
platform_data
;
struct
device
*
dev
=
&
pdev
->
dev
;
const
struct
gpio_keys_platform_data
*
pdata
=
dev_get_platdata
(
dev
);
struct
gpio_keys_polled_dev
*
bdev
;
struct
input_polled_dev
*
poll_dev
;
struct
input_dev
*
input
;
int
error
;
int
i
;
if
(
!
pdata
||
!
pdata
->
poll_interval
)
if
(
!
pdata
)
{
pdata
=
gpio_keys_polled_get_devtree_pdata
(
dev
);
if
(
IS_ERR
(
pdata
))
return
PTR_ERR
(
pdata
);
if
(
!
pdata
)
{
dev_err
(
dev
,
"missing platform data
\n
"
);
return
-
EINVAL
;
}
}
if
(
!
pdata
->
poll_interval
)
{
dev_err
(
dev
,
"missing poll_interval value
\n
"
);
error
=
-
EINVAL
;
goto
err_free_pdata
;
}
bdev
=
kzalloc
(
sizeof
(
struct
gpio_keys_polled_dev
)
+
pdata
->
nbuttons
*
sizeof
(
struct
gpio_keys_button_data
),
GFP_KERNEL
);
if
(
!
bdev
)
{
dev_err
(
dev
,
"no memory for private data
\n
"
);
return
-
ENOMEM
;
error
=
-
ENOMEM
;
goto
err_free_pdata
;
}
poll_dev
=
input_allocate_polled_device
();
...
...
@@ -209,15 +319,20 @@ static int __devinit gpio_keys_polled_probe(struct platform_device *pdev)
err_free_bdev:
kfree
(
bdev
);
platform_set_drvdata
(
pdev
,
NULL
);
err_free_pdata:
/* If we have no platform_data, we allocated pdata dynamically. */
if
(
!
dev_get_platdata
(
&
pdev
->
dev
))
kfree
(
pdata
);
return
error
;
}
static
int
__devexit
gpio_keys_polled_remove
(
struct
platform_device
*
pdev
)
{
struct
gpio_keys_polled_dev
*
bdev
=
platform_get_drvdata
(
pdev
);
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
const
struct
gpio_keys_platform_data
*
pdata
=
bdev
->
pdata
;
int
i
;
input_unregister_polled_device
(
bdev
->
poll_dev
);
...
...
@@ -227,6 +342,13 @@ static int __devexit gpio_keys_polled_remove(struct platform_device *pdev)
input_free_polled_device
(
bdev
->
poll_dev
);
/*
* If we had no platform_data, we allocated pdata dynamically and
* must free it here.
*/
if
(
!
dev_get_platdata
(
&
pdev
->
dev
))
kfree
(
pdata
);
kfree
(
bdev
);
platform_set_drvdata
(
pdev
,
NULL
);
...
...
@@ -239,6 +361,7 @@ static struct platform_driver gpio_keys_polled_driver = {
.
driver
=
{
.
name
=
DRV_NAME
,
.
owner
=
THIS_MODULE
,
.
of_match_table
=
of_match_ptr
(
gpio_keys_polled_of_match
),
},
};
module_platform_driver
(
gpio_keys_polled_driver
);
...
...
drivers/input/keyboard/omap-keypad.c
View file @
dde3ada3
...
...
@@ -413,7 +413,7 @@ static int __devinit omap_kp_probe(struct platform_device *pdev)
}
return
0
;
err5:
for
(
i
=
irq_idx
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
irq_idx
-
1
;
i
>=
0
;
i
--
)
free_irq
(
row_gpios
[
i
],
omap_kp
);
err4:
input_unregister_device
(
omap_kp
->
input
);
...
...
@@ -421,10 +421,10 @@ static int __devinit omap_kp_probe(struct platform_device *pdev)
err3:
device_remove_file
(
&
pdev
->
dev
,
&
dev_attr_enable
);
err2:
for
(
i
=
row_idx
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
row_idx
-
1
;
i
>=
0
;
i
--
)
gpio_free
(
row_gpios
[
i
]);
err1:
for
(
i
=
col_idx
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
col_idx
-
1
;
i
>=
0
;
i
--
)
gpio_free
(
col_gpios
[
i
]);
kfree
(
omap_kp
);
...
...
drivers/input/keyboard/samsung-keypad.c
View file @
dde3ada3
...
...
@@ -256,7 +256,7 @@ static struct samsung_keypad_platdata *samsung_keypad_parse_dt(
struct
matrix_keymap_data
*
keymap_data
;
uint32_t
*
keymap
,
num_rows
=
0
,
num_cols
=
0
;
struct
device_node
*
np
=
dev
->
of_node
,
*
key_np
;
unsigned
int
key_count
=
0
;
unsigned
int
key_count
;
pdata
=
devm_kzalloc
(
dev
,
sizeof
(
*
pdata
),
GFP_KERNEL
);
if
(
!
pdata
)
{
...
...
@@ -280,9 +280,7 @@ static struct samsung_keypad_platdata *samsung_keypad_parse_dt(
}
pdata
->
keymap_data
=
keymap_data
;
for_each_child_of_node
(
np
,
key_np
)
key_count
++
;
key_count
=
of_get_child_count
(
np
);
keymap_data
->
keymap_size
=
key_count
;
keymap
=
devm_kzalloc
(
dev
,
sizeof
(
uint32_t
)
*
key_count
,
GFP_KERNEL
);
if
(
!
keymap
)
{
...
...
@@ -662,8 +660,6 @@ static const struct of_device_id samsung_keypad_dt_match[] = {
{},
};
MODULE_DEVICE_TABLE
(
of
,
samsung_keypad_dt_match
);
#else
#define samsung_keypad_dt_match NULL
#endif
static
struct
platform_device_id
samsung_keypad_driver_ids
[]
=
{
...
...
@@ -684,7 +680,7 @@ static struct platform_driver samsung_keypad_driver = {
.
driver
=
{
.
name
=
"samsung-keypad"
,
.
owner
=
THIS_MODULE
,
.
of_match_table
=
samsung_keypad_dt_match
,
.
of_match_table
=
of_match_ptr
(
samsung_keypad_dt_match
)
,
.
pm
=
&
samsung_keypad_pm_ops
,
},
.
id_table
=
samsung_keypad_driver_ids
,
...
...
drivers/input/keyboard/tegra-kbc.c
View file @
dde3ada3
...
...
@@ -29,8 +29,8 @@
#include <linux/of.h>
#include <linux/clk.h>
#include <linux/slab.h>
#include <linux/input/tegra_kbc.h>
#include <mach/clk.h>
#include <mach/kbc.h>
#define KBC_MAX_DEBOUNCE_CNT 0x3ffu
...
...
drivers/input/misc/rotary_encoder.c
View file @
dde3ada3
...
...
@@ -24,12 +24,14 @@
#include <linux/gpio.h>
#include <linux/rotary_encoder.h>
#include <linux/slab.h>
#include <linux/of_platform.h>
#include <linux/of_gpio.h>
#define DRV_NAME "rotary-encoder"
struct
rotary_encoder
{
struct
input_dev
*
input
;
struct
rotary_encoder_platform_data
*
pdata
;
const
struct
rotary_encoder_platform_data
*
pdata
;
unsigned
int
axis
;
unsigned
int
pos
;
...
...
@@ -43,7 +45,7 @@ struct rotary_encoder {
char
last_stable
;
};
static
int
rotary_encoder_get_state
(
struct
rotary_encoder_platform_data
*
pdata
)
static
int
rotary_encoder_get_state
(
const
struct
rotary_encoder_platform_data
*
pdata
)
{
int
a
=
!!
gpio_get_value
(
pdata
->
gpio_a
);
int
b
=
!!
gpio_get_value
(
pdata
->
gpio_b
);
...
...
@@ -56,7 +58,7 @@ static int rotary_encoder_get_state(struct rotary_encoder_platform_data *pdata)
static
void
rotary_encoder_report_event
(
struct
rotary_encoder
*
encoder
)
{
struct
rotary_encoder_platform_data
*
pdata
=
encoder
->
pdata
;
const
struct
rotary_encoder_platform_data
*
pdata
=
encoder
->
pdata
;
if
(
pdata
->
relative_axis
)
{
input_report_rel
(
encoder
->
input
,
...
...
@@ -140,36 +142,89 @@ static irqreturn_t rotary_encoder_half_period_irq(int irq, void *dev_id)
return
IRQ_HANDLED
;
}
#ifdef CONFIG_OF
static
struct
of_device_id
rotary_encoder_of_match
[]
=
{
{
.
compatible
=
"rotary-encoder"
,
},
{
},
};
MODULE_DEVICE_TABLE
(
of
,
rotary_encoder_of_match
);
static
struct
rotary_encoder_platform_data
*
__devinit
rotary_encoder_parse_dt
(
struct
device
*
dev
)
{
const
struct
of_device_id
*
of_id
=
of_match_device
(
rotary_encoder_of_match
,
dev
);
struct
device_node
*
np
=
dev
->
of_node
;
struct
rotary_encoder_platform_data
*
pdata
;
enum
of_gpio_flags
flags
;
if
(
!
of_id
||
!
np
)
return
NULL
;
pdata
=
kzalloc
(
sizeof
(
struct
rotary_encoder_platform_data
),
GFP_KERNEL
);
if
(
!
pdata
)
return
ERR_PTR
(
-
ENOMEM
);
of_property_read_u32
(
np
,
"rotary-encoder,steps"
,
&
pdata
->
steps
);
of_property_read_u32
(
np
,
"linux,axis"
,
&
pdata
->
axis
);
pdata
->
gpio_a
=
of_get_gpio_flags
(
np
,
0
,
&
flags
);
pdata
->
inverted_a
=
flags
&
OF_GPIO_ACTIVE_LOW
;
pdata
->
gpio_b
=
of_get_gpio_flags
(
np
,
1
,
&
flags
);
pdata
->
inverted_b
=
flags
&
OF_GPIO_ACTIVE_LOW
;
pdata
->
relative_axis
=
!!
of_get_property
(
np
,
"rotary-encoder,relative-axis"
,
NULL
);
pdata
->
rollover
=
!!
of_get_property
(
np
,
"rotary-encoder,rollover"
,
NULL
);
pdata
->
half_period
=
!!
of_get_property
(
np
,
"rotary-encoder,half-period"
,
NULL
);
return
pdata
;
}
#else
static
inline
struct
rotary_encoder_platform_data
*
rotary_encoder_parse_dt
(
struct
device
*
dev
)
{
return
NULL
;
}
#endif
static
int
__devinit
rotary_encoder_probe
(
struct
platform_device
*
pdev
)
{
struct
rotary_encoder_platform_data
*
pdata
=
pdev
->
dev
.
platform_data
;
struct
device
*
dev
=
&
pdev
->
dev
;
const
struct
rotary_encoder_platform_data
*
pdata
=
dev_get_platdata
(
dev
);
struct
rotary_encoder
*
encoder
;
struct
input_dev
*
input
;
irq_handler_t
handler
;
int
err
;
if
(
!
pdata
)
{
dev_err
(
&
pdev
->
dev
,
"missing platform data
\n
"
);
return
-
ENOENT
;
pdata
=
rotary_encoder_parse_dt
(
dev
);
if
(
IS_ERR
(
pdata
))
return
PTR_ERR
(
pdata
);
if
(
!
pdata
)
{
dev_err
(
dev
,
"missing platform data
\n
"
);
return
-
EINVAL
;
}
}
encoder
=
kzalloc
(
sizeof
(
struct
rotary_encoder
),
GFP_KERNEL
);
input
=
input_allocate_device
();
if
(
!
encoder
||
!
input
)
{
dev_err
(
&
pdev
->
dev
,
"failed to allocate memory for device
\n
"
);
err
=
-
ENOMEM
;
goto
exit_free_mem
;
}
encoder
->
input
=
input
;
encoder
->
pdata
=
pdata
;
encoder
->
irq_a
=
gpio_to_irq
(
pdata
->
gpio_a
);
encoder
->
irq_b
=
gpio_to_irq
(
pdata
->
gpio_b
);
/* create and register the input driver */
input
->
name
=
pdev
->
name
;
input
->
id
.
bustype
=
BUS_HOST
;
input
->
dev
.
parent
=
&
pdev
->
dev
;
input
->
dev
.
parent
=
dev
;
if
(
pdata
->
relative_axis
)
{
input
->
evbit
[
0
]
=
BIT_MASK
(
EV_REL
);
...
...
@@ -180,40 +235,21 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
pdata
->
axis
,
0
,
pdata
->
steps
,
0
,
1
);
}
err
=
input_register_device
(
input
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"failed to register input device
\n
"
);
goto
exit_free_mem
;
}
/* request the GPIOs */
err
=
gpio_request
(
pdata
->
gpio_a
,
DRV_NAME
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"unable to request GPIO %d
\n
"
,
pdata
->
gpio_a
);
goto
exit_unregister_input
;
}
err
=
gpio_direction_input
(
pdata
->
gpio_a
);
err
=
gpio_request_one
(
pdata
->
gpio_a
,
GPIOF_IN
,
dev_name
(
dev
));
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"unable to set GPIO %d for input
\n
"
,
pdata
->
gpio_a
);
goto
exit_unregister_input
;
dev_err
(
dev
,
"unable to request GPIO %d
\n
"
,
pdata
->
gpio_a
);
goto
exit_free_mem
;
}
err
=
gpio_request
(
pdata
->
gpio_b
,
DRV_NAME
);
err
=
gpio_request
_one
(
pdata
->
gpio_b
,
GPIOF_IN
,
dev_name
(
dev
)
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"unable to request GPIO %d
\n
"
,
pdata
->
gpio_b
);
dev_err
(
dev
,
"unable to request GPIO %d
\n
"
,
pdata
->
gpio_b
);
goto
exit_free_gpio_a
;
}
err
=
gpio_direction_input
(
pdata
->
gpio_b
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"unable to set GPIO %d for input
\n
"
,
pdata
->
gpio_b
);
goto
exit_free_gpio_a
;
}
encoder
->
irq_a
=
gpio_to_irq
(
pdata
->
gpio_a
);
encoder
->
irq_b
=
gpio_to_irq
(
pdata
->
gpio_b
);
/* request the IRQs */
if
(
pdata
->
half_period
)
{
...
...
@@ -227,8 +263,7 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
IRQF_TRIGGER_RISING
|
IRQF_TRIGGER_FALLING
,
DRV_NAME
,
encoder
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"unable to request IRQ %d
\n
"
,
encoder
->
irq_a
);
dev_err
(
dev
,
"unable to request IRQ %d
\n
"
,
encoder
->
irq_a
);
goto
exit_free_gpio_b
;
}
...
...
@@ -236,43 +271,55 @@ static int __devinit rotary_encoder_probe(struct platform_device *pdev)
IRQF_TRIGGER_RISING
|
IRQF_TRIGGER_FALLING
,
DRV_NAME
,
encoder
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"unable to request IRQ %d
\n
"
,
encoder
->
irq_b
);
dev_err
(
dev
,
"unable to request IRQ %d
\n
"
,
encoder
->
irq_b
);
goto
exit_free_irq_a
;
}
err
=
input_register_device
(
input
);
if
(
err
)
{
dev_err
(
dev
,
"failed to register input device
\n
"
);
goto
exit_free_irq_b
;
}
platform_set_drvdata
(
pdev
,
encoder
);
return
0
;
exit_free_irq_b:
free_irq
(
encoder
->
irq_b
,
encoder
);
exit_free_irq_a:
free_irq
(
encoder
->
irq_a
,
encoder
);
exit_free_gpio_b:
gpio_free
(
pdata
->
gpio_b
);
exit_free_gpio_a:
gpio_free
(
pdata
->
gpio_a
);
exit_unregister_input:
input_unregister_device
(
input
);
input
=
NULL
;
/* so we don't try to free it */
exit_free_mem:
input_free_device
(
input
);
kfree
(
encoder
);
if
(
!
dev_get_platdata
(
&
pdev
->
dev
))
kfree
(
pdata
);
return
err
;
}
static
int
__devexit
rotary_encoder_remove
(
struct
platform_device
*
pdev
)
{
struct
rotary_encoder
*
encoder
=
platform_get_drvdata
(
pdev
);
struct
rotary_encoder_platform_data
*
pdata
=
pdev
->
dev
.
platform_
data
;
const
struct
rotary_encoder_platform_data
*
pdata
=
encoder
->
p
data
;
free_irq
(
encoder
->
irq_a
,
encoder
);
free_irq
(
encoder
->
irq_b
,
encoder
);
gpio_free
(
pdata
->
gpio_a
);
gpio_free
(
pdata
->
gpio_b
);
input_unregister_device
(
encoder
->
input
);
platform_set_drvdata
(
pdev
,
NULL
);
kfree
(
encoder
);
if
(
!
dev_get_platdata
(
&
pdev
->
dev
))
kfree
(
pdata
);
platform_set_drvdata
(
pdev
,
NULL
);
return
0
;
}
...
...
@@ -282,6 +329,7 @@ static struct platform_driver rotary_encoder_driver = {
.
driver
=
{
.
name
=
DRV_NAME
,
.
owner
=
THIS_MODULE
,
.
of_match_table
=
of_match_ptr
(
rotary_encoder_of_match
),
}
};
module_platform_driver
(
rotary_encoder_driver
);
...
...
drivers/input/misc/twl4030-pwrbutton.c
View file @
dde3ada3
...
...
@@ -42,6 +42,7 @@ static irqreturn_t powerbutton_irq(int irq, void *_pwr)
err
=
twl_i2c_read_u8
(
TWL4030_MODULE_PM_MASTER
,
&
value
,
STS_HW_CONDITIONS
);
if
(
!
err
)
{
pm_wakeup_event
(
pwr
->
dev
.
parent
,
0
);
input_report_key
(
pwr
,
KEY_POWER
,
value
&
PWR_PWRON_IRQ
);
input_sync
(
pwr
);
}
else
{
...
...
drivers/input/misc/uinput.c
View file @
dde3ada3
This diff is collapsed.
Click to expand it.
drivers/input/mouse/hgpk.c
View file @
dde3ada3
...
...
@@ -334,11 +334,8 @@ static bool hgpk_is_byte_valid(struct psmouse *psmouse, unsigned char *packet)
if
(
!
valid
)
psmouse_dbg
(
psmouse
,
"bad data, mode %d (%d) %02x %02x %02x %02x %02x %02x
\n
"
,
priv
->
mode
,
pktcnt
,
psmouse
->
packet
[
0
],
psmouse
->
packet
[
1
],
psmouse
->
packet
[
2
],
psmouse
->
packet
[
3
],
psmouse
->
packet
[
4
],
psmouse
->
packet
[
5
]);
"bad data, mode %d (%d) %*ph
\n
"
,
priv
->
mode
,
pktcnt
,
6
,
psmouse
->
packet
);
return
valid
;
}
...
...
@@ -1030,7 +1027,7 @@ static enum hgpk_model_t hgpk_get_model(struct psmouse *psmouse)
return
-
EIO
;
}
psmouse_dbg
(
psmouse
,
"ID: %
02x %02x %02x
\n
"
,
param
[
0
],
param
[
1
],
param
[
2
]
);
psmouse_dbg
(
psmouse
,
"ID: %
*ph
\n
"
,
3
,
param
);
/* HGPK signature: 0x67, 0x00, 0x<model> */
if
(
param
[
0
]
!=
0x67
||
param
[
1
]
!=
0x00
)
...
...
drivers/input/mousedev.c
View file @
dde3ada3
...
...
@@ -551,17 +551,16 @@ static int mousedev_open(struct inode *inode, struct file *file)
return
-
ENODEV
;
error
=
mutex_lock_interruptible
(
&
mousedev_table_mutex
);
if
(
error
)
{
if
(
error
)
return
error
;
}
mousedev
=
mousedev_table
[
i
];
if
(
mousedev
)
get_device
(
&
mousedev
->
dev
);
mutex_unlock
(
&
mousedev_table_mutex
);
if
(
!
mousedev
)
{
if
(
!
mousedev
)
return
-
ENODEV
;
}
client
=
kzalloc
(
sizeof
(
struct
mousedev_client
),
GFP_KERNEL
);
if
(
!
client
)
{
...
...
@@ -1088,7 +1087,7 @@ static int __init mousedev_init(void)
#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX
error
=
misc_register
(
&
psaux_mouse
);
if
(
error
)
pr_warn
ing
(
"could not register psaux device, error: %d
\n
"
,
pr_warn
(
"could not register psaux device, error: %d
\n
"
,
error
);
else
psaux_registered
=
1
;
...
...
drivers/input/sparse-keymap.c
View file @
dde3ada3
...
...
@@ -180,11 +180,11 @@ int sparse_keymap_setup(struct input_dev *dev,
for
(
e
=
keymap
;
e
->
type
!=
KE_END
;
e
++
)
map_size
++
;
map
=
kcalloc
(
map_size
,
sizeof
(
struct
key_entry
),
GFP_KERNEL
);
map
=
kcalloc
(
map_size
,
sizeof
(
struct
key_entry
),
GFP_KERNEL
);
if
(
!
map
)
return
-
ENOMEM
;
memcpy
(
map
,
keymap
,
map_size
*
sizeof
(
struct
key_entry
));
memcpy
(
map
,
keymap
,
map_size
*
sizeof
(
struct
key_entry
));
for
(
i
=
0
;
i
<
map_size
;
i
++
)
{
entry
=
&
map
[
i
];
...
...
drivers/input/touchscreen/s3c2410_ts.c
View file @
dde3ada3
...
...
@@ -406,7 +406,7 @@ static int s3c2410ts_resume(struct device *dev)
return
0
;
}
static
struct
dev_pm_ops
s3c_ts_pmops
=
{
static
const
struct
dev_pm_ops
s3c_ts_pmops
=
{
.
suspend
=
s3c2410ts_suspend
,
.
resume
=
s3c2410ts_resume
,
};
...
...
fs/compat_ioctl.c
View file @
dde3ada3
...
...
@@ -897,6 +897,8 @@ COMPATIBLE_IOCTL(KDGKBSENT)
COMPATIBLE_IOCTL
(
KDSKBSENT
)
COMPATIBLE_IOCTL
(
KDGKBDIACR
)
COMPATIBLE_IOCTL
(
KDSKBDIACR
)
COMPATIBLE_IOCTL
(
KDGKBDIACRUC
)
COMPATIBLE_IOCTL
(
KDSKBDIACRUC
)
COMPATIBLE_IOCTL
(
KDKBDREP
)
COMPATIBLE_IOCTL
(
KDGKBLED
)
COMPATIBLE_IOCTL
(
KDGETLED
)
...
...
arch/arm/mach-tegra/include/mach/
kbc.h
→
include/linux/input/tegra_
kbc.h
View file @
dde3ada3
File moved
include/linux/uinput.h
View file @
dde3ada3
...
...
@@ -32,6 +32,7 @@
* - first public version
*/
#include <linux/types.h>
#include <linux/input.h>
#define UINPUT_VERSION 3
...
...
@@ -44,14 +45,14 @@
enum
uinput_state
{
UIST_NEW_DEVICE
,
UIST_SETUP_COMPLETE
,
UIST_CREATED
};
struct
uinput_request
{
int
id
;
int
code
;
/* UI_FF_UPLOAD, UI_FF_ERASE */
unsigned
int
id
;
unsigned
int
code
;
/* UI_FF_UPLOAD, UI_FF_ERASE */
int
retval
;
struct
completion
done
;
union
{
int
effect_id
;
unsigned
int
effect_id
;
struct
{
struct
ff_effect
*
effect
;
struct
ff_effect
*
old
;
...
...
@@ -77,16 +78,16 @@ struct uinput_device {
#endif
/* __KERNEL__ */
struct
uinput_ff_upload
{
int
request_id
;
int
retval
;
__u32
request_id
;
__s32
retval
;
struct
ff_effect
effect
;
struct
ff_effect
old
;
};
struct
uinput_ff_erase
{
int
request_id
;
int
retval
;
int
effect_id
;
__u32
request_id
;
__s32
retval
;
__u32
effect_id
;
};
/* ioctl */
...
...
@@ -166,11 +167,11 @@ struct uinput_ff_erase {
struct
uinput_user_dev
{
char
name
[
UINPUT_MAX_NAME_SIZE
];
struct
input_id
id
;
int
ff_effects_max
;
int
absmax
[
ABS_CNT
];
int
absmin
[
ABS_CNT
];
int
absfuzz
[
ABS_CNT
];
int
absflat
[
ABS_CNT
];
__u32
ff_effects_max
;
__s32
absmax
[
ABS_CNT
];
__s32
absmin
[
ABS_CNT
];
__s32
absfuzz
[
ABS_CNT
];
__s32
absflat
[
ABS_CNT
];
};
#endif
/* __UINPUT_H_ */
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