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
d89b8f40
Commit
d89b8f40
authored
Feb 15, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
parents
0b60afba
02860ab6
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
109 additions
and
67 deletions
+109
-67
drivers/input/keyboard/Makefile
drivers/input/keyboard/Makefile
+0
-1
drivers/input/misc/Makefile
drivers/input/misc/Makefile
+0
-1
drivers/input/misc/ixp4xx-beeper.c
drivers/input/misc/ixp4xx-beeper.c
+1
-0
drivers/input/mouse/logips2pp.c
drivers/input/mouse/logips2pp.c
+1
-0
drivers/input/mouse/trackpoint.c
drivers/input/mouse/trackpoint.c
+14
-6
drivers/input/mouse/trackpoint.h
drivers/input/mouse/trackpoint.h
+2
-2
drivers/input/serio/Makefile
drivers/input/serio/Makefile
+0
-1
drivers/input/touchscreen/ads7846.c
drivers/input/touchscreen/ads7846.c
+91
-56
No files found.
drivers/input/keyboard/Makefile
View file @
d89b8f40
...
@@ -11,7 +11,6 @@ obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o
...
@@ -11,7 +11,6 @@ obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o
obj-$(CONFIG_KEYBOARD_AMIGA)
+=
amikbd.o
obj-$(CONFIG_KEYBOARD_AMIGA)
+=
amikbd.o
obj-$(CONFIG_KEYBOARD_LOCOMO)
+=
locomokbd.o
obj-$(CONFIG_KEYBOARD_LOCOMO)
+=
locomokbd.o
obj-$(CONFIG_KEYBOARD_NEWTON)
+=
newtonkbd.o
obj-$(CONFIG_KEYBOARD_NEWTON)
+=
newtonkbd.o
obj-$(CONFIG_KEYBOARD_98KBD)
+=
98kbd.o
obj-$(CONFIG_KEYBOARD_CORGI)
+=
corgikbd.o
obj-$(CONFIG_KEYBOARD_CORGI)
+=
corgikbd.o
obj-$(CONFIG_KEYBOARD_SPITZ)
+=
spitzkbd.o
obj-$(CONFIG_KEYBOARD_SPITZ)
+=
spitzkbd.o
obj-$(CONFIG_KEYBOARD_HIL)
+=
hil_kbd.o
obj-$(CONFIG_KEYBOARD_HIL)
+=
hil_kbd.o
...
...
drivers/input/misc/Makefile
View file @
d89b8f40
...
@@ -7,7 +7,6 @@
...
@@ -7,7 +7,6 @@
obj-$(CONFIG_INPUT_SPARCSPKR)
+=
sparcspkr.o
obj-$(CONFIG_INPUT_SPARCSPKR)
+=
sparcspkr.o
obj-$(CONFIG_INPUT_PCSPKR)
+=
pcspkr.o
obj-$(CONFIG_INPUT_PCSPKR)
+=
pcspkr.o
obj-$(CONFIG_INPUT_M68K_BEEP)
+=
m68kspkr.o
obj-$(CONFIG_INPUT_M68K_BEEP)
+=
m68kspkr.o
obj-$(CONFIG_INPUT_98SPKR)
+=
98spkr.o
obj-$(CONFIG_INPUT_UINPUT)
+=
uinput.o
obj-$(CONFIG_INPUT_UINPUT)
+=
uinput.o
obj-$(CONFIG_INPUT_WISTRON_BTNS)
+=
wistron_btns.o
obj-$(CONFIG_INPUT_WISTRON_BTNS)
+=
wistron_btns.o
obj-$(CONFIG_HP_SDC_RTC)
+=
hp_sdc_rtc.o
obj-$(CONFIG_HP_SDC_RTC)
+=
hp_sdc_rtc.o
...
...
drivers/input/misc/ixp4xx-beeper.c
View file @
d89b8f40
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
#include <linux/input.h>
#include <linux/input.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <asm/hardware.h>
#include <asm/hardware.h>
MODULE_AUTHOR
(
"Alessandro Zummo <a.zummo@towertech.it>"
);
MODULE_AUTHOR
(
"Alessandro Zummo <a.zummo@towertech.it>"
);
...
...
drivers/input/mouse/logips2pp.c
View file @
d89b8f40
...
@@ -232,6 +232,7 @@ static struct ps2pp_info *get_model_info(unsigned char model)
...
@@ -232,6 +232,7 @@ static struct ps2pp_info *get_model_info(unsigned char model)
{
88
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
88
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
96
,
0
,
0
},
{
96
,
0
,
0
},
{
97
,
PS2PP_KIND_TP3
,
PS2PP_WHEEL
|
PS2PP_HWHEEL
},
{
97
,
PS2PP_KIND_TP3
,
PS2PP_WHEEL
|
PS2PP_HWHEEL
},
{
99
,
PS2PP_KIND_WHEEL
,
PS2PP_WHEEL
},
{
100
,
PS2PP_KIND_MX
,
/* MX510 */
{
100
,
PS2PP_KIND_MX
,
/* MX510 */
PS2PP_WHEEL
|
PS2PP_SIDE_BTN
|
PS2PP_TASK_BTN
|
PS2PP_WHEEL
|
PS2PP_SIDE_BTN
|
PS2PP_TASK_BTN
|
PS2PP_EXTRA_BTN
|
PS2PP_NAV_BTN
},
PS2PP_EXTRA_BTN
|
PS2PP_NAV_BTN
},
...
...
drivers/input/mouse/trackpoint.c
View file @
d89b8f40
...
@@ -68,15 +68,19 @@ struct trackpoint_attr_data {
...
@@ -68,15 +68,19 @@ struct trackpoint_attr_data {
size_t
field_offset
;
size_t
field_offset
;
unsigned
char
command
;
unsigned
char
command
;
unsigned
char
mask
;
unsigned
char
mask
;
unsigned
char
inverted
;
};
};
static
ssize_t
trackpoint_show_int_attr
(
struct
psmouse
*
psmouse
,
void
*
data
,
char
*
buf
)
static
ssize_t
trackpoint_show_int_attr
(
struct
psmouse
*
psmouse
,
void
*
data
,
char
*
buf
)
{
{
struct
trackpoint_data
*
tp
=
psmouse
->
private
;
struct
trackpoint_data
*
tp
=
psmouse
->
private
;
struct
trackpoint_attr_data
*
attr
=
data
;
struct
trackpoint_attr_data
*
attr
=
data
;
unsigned
char
*
field
=
(
unsigned
char
*
)((
char
*
)
tp
+
attr
->
field_offset
);
unsigned
char
value
=
*
(
unsigned
char
*
)((
char
*
)
tp
+
attr
->
field_offset
);
if
(
attr
->
inverted
)
value
=
!
value
;
return
sprintf
(
buf
,
"%u
\n
"
,
*
field
);
return
sprintf
(
buf
,
"%u
\n
"
,
value
);
}
}
static
ssize_t
trackpoint_set_int_attr
(
struct
psmouse
*
psmouse
,
void
*
data
,
static
ssize_t
trackpoint_set_int_attr
(
struct
psmouse
*
psmouse
,
void
*
data
,
...
@@ -120,6 +124,9 @@ static ssize_t trackpoint_set_bit_attr(struct psmouse *psmouse, void *data,
...
@@ -120,6 +124,9 @@ static ssize_t trackpoint_set_bit_attr(struct psmouse *psmouse, void *data,
if
(
*
rest
||
value
>
1
)
if
(
*
rest
||
value
>
1
)
return
-
EINVAL
;
return
-
EINVAL
;
if
(
attr
->
inverted
)
value
=
!
value
;
if
(
*
field
!=
value
)
{
if
(
*
field
!=
value
)
{
*
field
=
value
;
*
field
=
value
;
trackpoint_toggle_bit
(
&
psmouse
->
ps2dev
,
attr
->
command
,
attr
->
mask
);
trackpoint_toggle_bit
(
&
psmouse
->
ps2dev
,
attr
->
command
,
attr
->
mask
);
...
@@ -129,11 +136,12 @@ static ssize_t trackpoint_set_bit_attr(struct psmouse *psmouse, void *data,
...
@@ -129,11 +136,12 @@ static ssize_t trackpoint_set_bit_attr(struct psmouse *psmouse, void *data,
}
}
#define TRACKPOINT_BIT_ATTR(_name, _command, _mask) \
#define TRACKPOINT_BIT_ATTR(_name, _command, _mask
, _inv
) \
static struct trackpoint_attr_data trackpoint_attr_##_name = { \
static struct trackpoint_attr_data trackpoint_attr_##_name = { \
.field_offset = offsetof(struct trackpoint_data, _name), \
.field_offset = offsetof(struct trackpoint_data, _name), \
.command = _command, \
.command = _command, \
.mask = _mask, \
.mask = _mask, \
.inverted = _inv, \
}; \
}; \
PSMOUSE_DEFINE_ATTR(_name, S_IWUSR | S_IRUGO, \
PSMOUSE_DEFINE_ATTR(_name, S_IWUSR | S_IRUGO, \
&trackpoint_attr_##_name, \
&trackpoint_attr_##_name, \
...
@@ -150,9 +158,9 @@ TRACKPOINT_INT_ATTR(upthresh, TP_UP_THRESH);
...
@@ -150,9 +158,9 @@ TRACKPOINT_INT_ATTR(upthresh, TP_UP_THRESH);
TRACKPOINT_INT_ATTR
(
ztime
,
TP_Z_TIME
);
TRACKPOINT_INT_ATTR
(
ztime
,
TP_Z_TIME
);
TRACKPOINT_INT_ATTR
(
jenks
,
TP_JENKS_CURV
);
TRACKPOINT_INT_ATTR
(
jenks
,
TP_JENKS_CURV
);
TRACKPOINT_BIT_ATTR
(
press_to_select
,
TP_TOGGLE_PTSON
,
TP_MASK_PTSON
);
TRACKPOINT_BIT_ATTR
(
press_to_select
,
TP_TOGGLE_PTSON
,
TP_MASK_PTSON
,
0
);
TRACKPOINT_BIT_ATTR
(
skipback
,
TP_TOGGLE_SKIPBACK
,
TP_MASK_SKIPBACK
);
TRACKPOINT_BIT_ATTR
(
skipback
,
TP_TOGGLE_SKIPBACK
,
TP_MASK_SKIPBACK
,
0
);
TRACKPOINT_BIT_ATTR
(
ext_dev
,
TP_TOGGLE_EXT_DEV
,
TP_MASK_EXT_DEV
);
TRACKPOINT_BIT_ATTR
(
ext_dev
,
TP_TOGGLE_EXT_DEV
,
TP_MASK_EXT_DEV
,
1
);
static
struct
attribute
*
trackpoint_attrs
[]
=
{
static
struct
attribute
*
trackpoint_attrs
[]
=
{
&
psmouse_attr_sensitivity
.
dattr
.
attr
,
&
psmouse_attr_sensitivity
.
dattr
.
attr
,
...
...
drivers/input/mouse/trackpoint.h
View file @
d89b8f40
...
@@ -78,7 +78,7 @@
...
@@ -78,7 +78,7 @@
#define TP_TOGGLE_MB 0x23
/* Disable/Enable Middle Button */
#define TP_TOGGLE_MB 0x23
/* Disable/Enable Middle Button */
#define TP_MASK_MB 0x01
#define TP_MASK_MB 0x01
#define TP_TOGGLE_EXT_DEV 0x23
/*
Togg
le external device */
#define TP_TOGGLE_EXT_DEV 0x23
/*
Disab
le external device */
#define TP_MASK_EXT_DEV 0x02
#define TP_MASK_EXT_DEV 0x02
#define TP_TOGGLE_DRIFT 0x23
/* Drift Correction */
#define TP_TOGGLE_DRIFT 0x23
/* Drift Correction */
#define TP_MASK_DRIFT 0x80
#define TP_MASK_DRIFT 0x80
...
@@ -125,7 +125,7 @@
...
@@ -125,7 +125,7 @@
#define TP_DEF_MB 0x00
#define TP_DEF_MB 0x00
#define TP_DEF_PTSON 0x00
#define TP_DEF_PTSON 0x00
#define TP_DEF_SKIPBACK 0x00
#define TP_DEF_SKIPBACK 0x00
#define TP_DEF_EXT_DEV 0x0
1
#define TP_DEF_EXT_DEV 0x0
0
/* 0 means enabled */
#define MAKE_PS2_CMD(params, results, cmd) ((params<<12) | (results<<8) | (cmd))
#define MAKE_PS2_CMD(params, results, cmd) ((params<<12) | (results<<8) | (cmd))
...
...
drivers/input/serio/Makefile
View file @
d89b8f40
...
@@ -13,7 +13,6 @@ obj-$(CONFIG_SERIO_RPCKBD) += rpckbd.o
...
@@ -13,7 +13,6 @@ obj-$(CONFIG_SERIO_RPCKBD) += rpckbd.o
obj-$(CONFIG_SERIO_SA1111)
+=
sa1111ps2.o
obj-$(CONFIG_SERIO_SA1111)
+=
sa1111ps2.o
obj-$(CONFIG_SERIO_AMBAKMI)
+=
ambakmi.o
obj-$(CONFIG_SERIO_AMBAKMI)
+=
ambakmi.o
obj-$(CONFIG_SERIO_Q40KBD)
+=
q40kbd.o
obj-$(CONFIG_SERIO_Q40KBD)
+=
q40kbd.o
obj-$(CONFIG_SERIO_98KBD)
+=
98kbd-io.o
obj-$(CONFIG_SERIO_GSCPS2)
+=
gscps2.o
obj-$(CONFIG_SERIO_GSCPS2)
+=
gscps2.o
obj-$(CONFIG_HP_SDC)
+=
hp_sdc.o
obj-$(CONFIG_HP_SDC)
+=
hp_sdc.o
obj-$(CONFIG_HIL_MLC)
+=
hp_sdc_mlc.o hil_mlc.o
obj-$(CONFIG_HIL_MLC)
+=
hp_sdc_mlc.o hil_mlc.o
...
...
drivers/input/touchscreen/ads7846.c
View file @
d89b8f40
...
@@ -48,10 +48,13 @@
...
@@ -48,10 +48,13 @@
#define TS_POLL_PERIOD msecs_to_jiffies(10)
#define TS_POLL_PERIOD msecs_to_jiffies(10)
/* this driver doesn't aim at the peak continuous sample rate */
#define SAMPLE_BITS (8
/*cmd*/
+ 16
/*sample*/
+ 2
/* before, after */
)
struct
ts_event
{
struct
ts_event
{
/* For portability, we can't read 12 bit values using SPI (which
/* For portability, we can't read 12 bit values using SPI (which
* would make the controller deliver them as native byteorder u16
* would make the controller deliver them as native byteorder u16
* with msbs zeroed). Instead, we read them as two 8-b
yte
values,
* with msbs zeroed). Instead, we read them as two 8-b
it
values,
* which need byteswapping then range adjustment.
* which need byteswapping then range adjustment.
*/
*/
__be16
x
;
__be16
x
;
...
@@ -60,7 +63,7 @@ struct ts_event {
...
@@ -60,7 +63,7 @@ struct ts_event {
};
};
struct
ads7846
{
struct
ads7846
{
struct
input_dev
input
;
struct
input_dev
*
input
;
char
phys
[
32
];
char
phys
[
32
];
struct
spi_device
*
spi
;
struct
spi_device
*
spi
;
...
@@ -68,6 +71,7 @@ struct ads7846 {
...
@@ -68,6 +71,7 @@ struct ads7846 {
u16
vref_delay_usecs
;
u16
vref_delay_usecs
;
u16
x_plate_ohms
;
u16
x_plate_ohms
;
u8
read_x
,
read_y
,
read_z1
,
read_z2
;
struct
ts_event
tc
;
struct
ts_event
tc
;
struct
spi_transfer
xfer
[
8
];
struct
spi_transfer
xfer
[
8
];
...
@@ -117,10 +121,10 @@ struct ads7846 {
...
@@ -117,10 +121,10 @@ struct ads7846 {
#define READ_12BIT_DFR(x) (ADS_START | ADS_A2A1A0_d_ ## x \
#define READ_12BIT_DFR(x) (ADS_START | ADS_A2A1A0_d_ ## x \
| ADS_12_BIT | ADS_DFR)
| ADS_12_BIT | ADS_DFR)
static
const
u8
read_y
=
READ_12BIT_DFR
(
y
)
|
ADS_PD10_ADC_ON
;
#define READ_Y (READ_12BIT_DFR(y) | ADS_PD10_ADC_ON)
static
const
u8
read_z1
=
READ_12BIT_DFR
(
z1
)
|
ADS_PD10_ADC_ON
;
#define READ_Z1 (READ_12BIT_DFR(z1) | ADS_PD10_ADC_ON)
static
const
u8
read_z2
=
READ_12BIT_DFR
(
z2
)
|
ADS_PD10_ADC_ON
;
#define READ_Z2 (READ_12BIT_DFR(z2) | ADS_PD10_ADC_ON)
static
const
u8
read_x
=
READ_12BIT_DFR
(
x
)
|
ADS_PD10_PDOWN
;
/* LAST */
#define READ_X (READ_12BIT_DFR(x) | ADS_PD10_PDOWN)
/* LAST */
/* single-ended samples need to first power up reference voltage;
/* single-ended samples need to first power up reference voltage;
* we leave both ADC and VREF powered
* we leave both ADC and VREF powered
...
@@ -128,8 +132,8 @@ static const u8 read_x = READ_12BIT_DFR(x) | ADS_PD10_PDOWN; /* LAST */
...
@@ -128,8 +132,8 @@ static const u8 read_x = READ_12BIT_DFR(x) | ADS_PD10_PDOWN; /* LAST */
#define READ_12BIT_SER(x) (ADS_START | ADS_A2A1A0_ ## x \
#define READ_12BIT_SER(x) (ADS_START | ADS_A2A1A0_ ## x \
| ADS_12_BIT | ADS_SER)
| ADS_12_BIT | ADS_SER)
static
const
u8
ref_on
=
READ_12BIT_DFR
(
x
)
|
ADS_PD10_ALL_ON
;
#define REF_ON (READ_12BIT_DFR(x) | ADS_PD10_ALL_ON)
static
const
u8
ref_off
=
READ_12BIT_DFR
(
y
)
|
ADS_PD10_PDOWN
;
#define REF_OFF (READ_12BIT_DFR(y) | ADS_PD10_PDOWN)
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
...
@@ -138,7 +142,9 @@ static const u8 ref_off = READ_12BIT_DFR(y) | ADS_PD10_PDOWN;
...
@@ -138,7 +142,9 @@ static const u8 ref_off = READ_12BIT_DFR(y) | ADS_PD10_PDOWN;
*/
*/
struct
ser_req
{
struct
ser_req
{
u8
ref_on
;
u8
command
;
u8
command
;
u8
ref_off
;
u16
scratch
;
u16
scratch
;
__be16
sample
;
__be16
sample
;
struct
spi_message
msg
;
struct
spi_message
msg
;
...
@@ -152,7 +158,7 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
...
@@ -152,7 +158,7 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
struct
ser_req
*
req
=
kzalloc
(
sizeof
*
req
,
SLAB_KERNEL
);
struct
ser_req
*
req
=
kzalloc
(
sizeof
*
req
,
SLAB_KERNEL
);
int
status
;
int
status
;
int
sample
;
int
sample
;
int
i
;
int
i
;
if
(
!
req
)
if
(
!
req
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -160,7 +166,8 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
...
@@ -160,7 +166,8 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
INIT_LIST_HEAD
(
&
req
->
msg
.
transfers
);
INIT_LIST_HEAD
(
&
req
->
msg
.
transfers
);
/* activate reference, so it has time to settle; */
/* activate reference, so it has time to settle; */
req
->
xfer
[
0
].
tx_buf
=
&
ref_on
;
req
->
ref_on
=
REF_ON
;
req
->
xfer
[
0
].
tx_buf
=
&
req
->
ref_on
;
req
->
xfer
[
0
].
len
=
1
;
req
->
xfer
[
0
].
len
=
1
;
req
->
xfer
[
1
].
rx_buf
=
&
req
->
scratch
;
req
->
xfer
[
1
].
rx_buf
=
&
req
->
scratch
;
req
->
xfer
[
1
].
len
=
2
;
req
->
xfer
[
1
].
len
=
2
;
...
@@ -182,7 +189,8 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
...
@@ -182,7 +189,8 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
/* REVISIT: take a few more samples, and compare ... */
/* REVISIT: take a few more samples, and compare ... */
/* turn off reference */
/* turn off reference */
req
->
xfer
[
4
].
tx_buf
=
&
ref_off
;
req
->
ref_off
=
REF_OFF
;
req
->
xfer
[
4
].
tx_buf
=
&
req
->
ref_off
;
req
->
xfer
[
4
].
len
=
1
;
req
->
xfer
[
4
].
len
=
1
;
req
->
xfer
[
5
].
rx_buf
=
&
req
->
scratch
;
req
->
xfer
[
5
].
rx_buf
=
&
req
->
scratch
;
req
->
xfer
[
5
].
len
=
2
;
req
->
xfer
[
5
].
len
=
2
;
...
@@ -236,11 +244,12 @@ SHOW(vbatt)
...
@@ -236,11 +244,12 @@ SHOW(vbatt)
static
void
ads7846_rx
(
void
*
ads
)
static
void
ads7846_rx
(
void
*
ads
)
{
{
struct
ads7846
*
ts
=
ads
;
struct
ads7846
*
ts
=
ads
;
unsigned
Rt
;
struct
input_dev
*
input_dev
=
ts
->
input
;
unsigned
sync
=
0
;
unsigned
Rt
;
u16
x
,
y
,
z1
,
z2
;
unsigned
sync
=
0
;
unsigned
long
flags
;
u16
x
,
y
,
z1
,
z2
;
unsigned
long
flags
;
/* adjust: 12 bit samples (left aligned), built from
/* adjust: 12 bit samples (left aligned), built from
* two 8 bit values writen msb-first.
* two 8 bit values writen msb-first.
...
@@ -276,21 +285,21 @@ static void ads7846_rx(void *ads)
...
@@ -276,21 +285,21 @@ static void ads7846_rx(void *ads)
* won't notice that, even if nPENIRQ never fires ...
* won't notice that, even if nPENIRQ never fires ...
*/
*/
if
(
!
ts
->
pendown
&&
Rt
!=
0
)
{
if
(
!
ts
->
pendown
&&
Rt
!=
0
)
{
input_report_key
(
&
ts
->
input
,
BTN_TOUCH
,
1
);
input_report_key
(
input_dev
,
BTN_TOUCH
,
1
);
sync
=
1
;
sync
=
1
;
}
else
if
(
ts
->
pendown
&&
Rt
==
0
)
{
}
else
if
(
ts
->
pendown
&&
Rt
==
0
)
{
input_report_key
(
&
ts
->
input
,
BTN_TOUCH
,
0
);
input_report_key
(
input_dev
,
BTN_TOUCH
,
0
);
sync
=
1
;
sync
=
1
;
}
}
if
(
Rt
)
{
if
(
Rt
)
{
input_report_abs
(
&
ts
->
input
,
ABS_X
,
x
);
input_report_abs
(
input_dev
,
ABS_X
,
x
);
input_report_abs
(
&
ts
->
input
,
ABS_Y
,
y
);
input_report_abs
(
input_dev
,
ABS_Y
,
y
);
input_report_abs
(
&
ts
->
input
,
ABS_PRESSURE
,
Rt
);
input_report_abs
(
input_dev
,
ABS_PRESSURE
,
Rt
);
sync
=
1
;
sync
=
1
;
}
}
if
(
sync
)
if
(
sync
)
input_sync
(
&
ts
->
input
);
input_sync
(
input_dev
);
#ifdef VERBOSE
#ifdef VERBOSE
if
(
Rt
||
ts
->
pendown
)
if
(
Rt
||
ts
->
pendown
)
...
@@ -396,9 +405,10 @@ static int ads7846_resume(struct spi_device *spi)
...
@@ -396,9 +405,10 @@ static int ads7846_resume(struct spi_device *spi)
static
int
__devinit
ads7846_probe
(
struct
spi_device
*
spi
)
static
int
__devinit
ads7846_probe
(
struct
spi_device
*
spi
)
{
{
struct
ads7846
*
ts
;
struct
ads7846
*
ts
;
struct
input_dev
*
input_dev
;
struct
ads7846_platform_data
*
pdata
=
spi
->
dev
.
platform_data
;
struct
ads7846_platform_data
*
pdata
=
spi
->
dev
.
platform_data
;
struct
spi_transfer
*
x
;
struct
spi_transfer
*
x
;
int
i
;
int
err
;
if
(
!
spi
->
irq
)
{
if
(
!
spi
->
irq
)
{
dev_dbg
(
&
spi
->
dev
,
"no IRQ?
\n
"
);
dev_dbg
(
&
spi
->
dev
,
"no IRQ?
\n
"
);
...
@@ -411,9 +421,9 @@ static int __devinit ads7846_probe(struct spi_device *spi)
...
@@ -411,9 +421,9 @@ static int __devinit ads7846_probe(struct spi_device *spi)
}
}
/* don't exceed max specified sample rate */
/* don't exceed max specified sample rate */
if
(
spi
->
max_speed_hz
>
(
125000
*
16
))
{
if
(
spi
->
max_speed_hz
>
(
125000
*
SAMPLE_BITS
))
{
dev_dbg
(
&
spi
->
dev
,
"f(sample) %d KHz?
\n
"
,
dev_dbg
(
&
spi
->
dev
,
"f(sample) %d KHz?
\n
"
,
(
spi
->
max_speed_hz
/
16
)
/
1000
);
(
spi
->
max_speed_hz
/
SAMPLE_BITS
)
/
1000
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
@@ -423,13 +433,18 @@ static int __devinit ads7846_probe(struct spi_device *spi)
...
@@ -423,13 +433,18 @@ static int __devinit ads7846_probe(struct spi_device *spi)
* to discard the four garbage LSBs.
* to discard the four garbage LSBs.
*/
*/
if
(
!
(
ts
=
kzalloc
(
sizeof
(
struct
ads7846
),
GFP_KERNEL
)))
ts
=
kzalloc
(
sizeof
(
struct
ads7846
),
GFP_KERNEL
);
return
-
ENOMEM
;
input_dev
=
input_allocate_device
();
if
(
!
ts
||
!
input_dev
)
{
err
=
-
ENOMEM
;
goto
err_free_mem
;
}
dev_set_drvdata
(
&
spi
->
dev
,
ts
);
dev_set_drvdata
(
&
spi
->
dev
,
ts
);
spi
->
dev
.
power
.
power_state
=
PMSG_ON
;
ts
->
spi
=
spi
;
ts
->
spi
=
spi
;
spi
->
dev
.
power
.
power_state
=
PMSG_ON
;
ts
->
input
=
input_dev
;
init_timer
(
&
ts
->
timer
);
init_timer
(
&
ts
->
timer
);
ts
->
timer
.
data
=
(
unsigned
long
)
ts
;
ts
->
timer
.
data
=
(
unsigned
long
)
ts
;
...
@@ -439,70 +454,80 @@ static int __devinit ads7846_probe(struct spi_device *spi)
...
@@ -439,70 +454,80 @@ static int __devinit ads7846_probe(struct spi_device *spi)
ts
->
vref_delay_usecs
=
pdata
->
vref_delay_usecs
?
:
100
;
ts
->
vref_delay_usecs
=
pdata
->
vref_delay_usecs
?
:
100
;
ts
->
x_plate_ohms
=
pdata
->
x_plate_ohms
?
:
400
;
ts
->
x_plate_ohms
=
pdata
->
x_plate_ohms
?
:
400
;
init_input_dev
(
&
ts
->
input
);
snprintf
(
ts
->
phys
,
sizeof
(
ts
->
phys
),
"%s/input0"
,
spi
->
dev
.
bus_id
);
ts
->
input
.
dev
=
&
spi
->
dev
;
input_dev
->
name
=
"ADS784x Touchscreen"
;
ts
->
input
.
name
=
"ADS784x Touchscreen"
;
input_dev
->
phys
=
ts
->
phys
;
snprintf
(
ts
->
phys
,
sizeof
ts
->
phys
,
"%s/input0"
,
spi
->
dev
.
bus_id
);
input_dev
->
cdev
.
dev
=
&
spi
->
dev
;
ts
->
input
.
phys
=
ts
->
phys
;
ts
->
input
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
);
input_dev
->
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
);
ts
->
input
.
keybit
[
LONG
(
BTN_TOUCH
)]
=
BIT
(
BTN_TOUCH
);
input_dev
->
keybit
[
LONG
(
BTN_TOUCH
)]
=
BIT
(
BTN_TOUCH
);
input_set_abs_params
(
&
ts
->
input
,
ABS_X
,
input_set_abs_params
(
input_dev
,
ABS_X
,
pdata
->
x_min
?
:
0
,
pdata
->
x_min
?
:
0
,
pdata
->
x_max
?
:
MAX_12BIT
,
pdata
->
x_max
?
:
MAX_12BIT
,
0
,
0
);
0
,
0
);
input_set_abs_params
(
&
ts
->
input
,
ABS_Y
,
input_set_abs_params
(
input_dev
,
ABS_Y
,
pdata
->
y_min
?
:
0
,
pdata
->
y_min
?
:
0
,
pdata
->
y_max
?
:
MAX_12BIT
,
pdata
->
y_max
?
:
MAX_12BIT
,
0
,
0
);
0
,
0
);
input_set_abs_params
(
&
ts
->
input
,
ABS_PRESSURE
,
input_set_abs_params
(
input_dev
,
ABS_PRESSURE
,
pdata
->
pressure_min
,
pdata
->
pressure_max
,
0
,
0
);
pdata
->
pressure_min
,
pdata
->
pressure_max
,
0
,
0
);
input_register_device
(
&
ts
->
input
);
/* set up the transfers to read touchscreen state; this assumes we
/* set up the transfers to read touchscreen state; this assumes we
* use formula #2 for pressure, not #3.
* use formula #2 for pressure, not #3.
*/
*/
INIT_LIST_HEAD
(
&
ts
->
msg
.
transfers
);
x
=
ts
->
xfer
;
x
=
ts
->
xfer
;
/* y- still on; turn on only y+ (and ADC) */
/* y- still on; turn on only y+ (and ADC) */
x
->
tx_buf
=
&
read_y
;
ts
->
read_y
=
READ_Y
;
x
->
tx_buf
=
&
ts
->
read_y
;
x
->
len
=
1
;
x
->
len
=
1
;
spi_message_add_tail
(
x
,
&
ts
->
msg
);
x
++
;
x
++
;
x
->
rx_buf
=
&
ts
->
tc
.
y
;
x
->
rx_buf
=
&
ts
->
tc
.
y
;
x
->
len
=
2
;
x
->
len
=
2
;
x
++
;
spi_message_add_tail
(
x
,
&
ts
->
msg
)
;
/* turn y+ off, x- on; we'll use formula #2 */
/* turn y+ off, x- on; we'll use formula #2 */
if
(
ts
->
model
==
7846
)
{
if
(
ts
->
model
==
7846
)
{
x
->
tx_buf
=
&
read_z1
;
x
++
;
ts
->
read_z1
=
READ_Z1
;
x
->
tx_buf
=
&
ts
->
read_z1
;
x
->
len
=
1
;
x
->
len
=
1
;
spi_message_add_tail
(
x
,
&
ts
->
msg
);
x
++
;
x
++
;
x
->
rx_buf
=
&
ts
->
tc
.
z1
;
x
->
rx_buf
=
&
ts
->
tc
.
z1
;
x
->
len
=
2
;
x
->
len
=
2
;
x
++
;
spi_message_add_tail
(
x
,
&
ts
->
msg
)
;
x
->
tx_buf
=
&
read_z2
;
x
++
;
ts
->
read_z2
=
READ_Z2
;
x
->
tx_buf
=
&
ts
->
read_z2
;
x
->
len
=
1
;
x
->
len
=
1
;
spi_message_add_tail
(
x
,
&
ts
->
msg
);
x
++
;
x
++
;
x
->
rx_buf
=
&
ts
->
tc
.
z2
;
x
->
rx_buf
=
&
ts
->
tc
.
z2
;
x
->
len
=
2
;
x
->
len
=
2
;
x
++
;
spi_message_add_tail
(
x
,
&
ts
->
msg
)
;
}
}
/* turn y- off, x+ on, then leave in lowpower */
/* turn y- off, x+ on, then leave in lowpower */
x
->
tx_buf
=
&
read_x
;
x
++
;
ts
->
read_x
=
READ_X
;
x
->
tx_buf
=
&
ts
->
read_x
;
x
->
len
=
1
;
x
->
len
=
1
;
spi_message_add_tail
(
x
,
&
ts
->
msg
);
x
++
;
x
++
;
x
->
rx_buf
=
&
ts
->
tc
.
x
;
x
->
rx_buf
=
&
ts
->
tc
.
x
;
x
->
len
=
2
;
x
->
len
=
2
;
x
++
;
CS_CHANGE
(
*
x
);
spi_message_add_tail
(
x
,
&
ts
->
msg
);
CS_CHANGE
(
x
[
-
1
]);
for
(
i
=
0
;
i
<
x
-
ts
->
xfer
;
i
++
)
spi_message_add_tail
(
&
ts
->
xfer
[
i
],
&
ts
->
msg
);
ts
->
msg
.
complete
=
ads7846_rx
;
ts
->
msg
.
complete
=
ads7846_rx
;
ts
->
msg
.
context
=
ts
;
ts
->
msg
.
context
=
ts
;
...
@@ -510,9 +535,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
...
@@ -510,9 +535,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
SA_SAMPLE_RANDOM
|
SA_TRIGGER_FALLING
,
SA_SAMPLE_RANDOM
|
SA_TRIGGER_FALLING
,
spi
->
dev
.
bus_id
,
ts
))
{
spi
->
dev
.
bus_id
,
ts
))
{
dev_dbg
(
&
spi
->
dev
,
"irq %d busy?
\n
"
,
spi
->
irq
);
dev_dbg
(
&
spi
->
dev
,
"irq %d busy?
\n
"
,
spi
->
irq
);
input_unregister_device
(
&
ts
->
input
);
err
=
-
EBUSY
;
kfree
(
ts
);
goto
err_free_mem
;
return
-
EBUSY
;
}
}
dev_info
(
&
spi
->
dev
,
"touchscreen, irq %d
\n
"
,
spi
->
irq
);
dev_info
(
&
spi
->
dev
,
"touchscreen, irq %d
\n
"
,
spi
->
irq
);
...
@@ -534,7 +558,18 @@ static int __devinit ads7846_probe(struct spi_device *spi)
...
@@ -534,7 +558,18 @@ static int __devinit ads7846_probe(struct spi_device *spi)
device_create_file
(
&
spi
->
dev
,
&
dev_attr_vbatt
);
device_create_file
(
&
spi
->
dev
,
&
dev_attr_vbatt
);
device_create_file
(
&
spi
->
dev
,
&
dev_attr_vaux
);
device_create_file
(
&
spi
->
dev
,
&
dev_attr_vaux
);
err
=
input_register_device
(
input_dev
);
if
(
err
)
goto
err_free_irq
;
return
0
;
return
0
;
err_free_irq:
free_irq
(
spi
->
irq
,
ts
);
err_free_mem:
input_free_device
(
input_dev
);
kfree
(
ts
);
return
err
;
}
}
static
int
__devexit
ads7846_remove
(
struct
spi_device
*
spi
)
static
int
__devexit
ads7846_remove
(
struct
spi_device
*
spi
)
...
@@ -554,7 +589,7 @@ static int __devexit ads7846_remove(struct spi_device *spi)
...
@@ -554,7 +589,7 @@ static int __devexit ads7846_remove(struct spi_device *spi)
device_remove_file
(
&
spi
->
dev
,
&
dev_attr_vbatt
);
device_remove_file
(
&
spi
->
dev
,
&
dev_attr_vbatt
);
device_remove_file
(
&
spi
->
dev
,
&
dev_attr_vaux
);
device_remove_file
(
&
spi
->
dev
,
&
dev_attr_vaux
);
input_unregister_device
(
&
ts
->
input
);
input_unregister_device
(
ts
->
input
);
kfree
(
ts
);
kfree
(
ts
);
dev_dbg
(
&
spi
->
dev
,
"unregistered touchscreen
\n
"
);
dev_dbg
(
&
spi
->
dev
,
"unregistered touchscreen
\n
"
);
...
...
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