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
93d33aa9
Commit
93d33aa9
authored
Mar 07, 2005
by
Paul Mundt
Committed by
Vojtech Pavlik
Mar 07, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New BitKeeper file ``drivers/input/touchscreen/hp680_ts_input.c''
parent
db8e0429
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
149 additions
and
1 deletion
+149
-1
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/Kconfig
+12
-0
drivers/input/touchscreen/Makefile
drivers/input/touchscreen/Makefile
+2
-1
drivers/input/touchscreen/hp680_ts_input.c
drivers/input/touchscreen/hp680_ts_input.c
+135
-0
No files found.
drivers/input/touchscreen/Kconfig
View file @
93d33aa9
...
...
@@ -83,4 +83,16 @@ config TOUCHSCREEN_MK712
To compile this driver as a module, choose M here: the
module will be called mk712.
config TOUCHSCREEN_HP600
tristate "HP Jornada 680/690 touchscreen"
depends on SH_HP600 && SH_ADC
help
Say Y here if you have a HP Jornada 680 or 690 and want to
support the built-in touchscreen.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called hp680_ts_input.
endif
drivers/input/touchscreen/Makefile
View file @
93d33aa9
...
...
@@ -8,5 +8,6 @@ obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o
obj-$(CONFIG_TOUCHSCREEN_CORGI)
+=
corgi_ts.o
obj-$(CONFIG_TOUCHSCREEN_GUNZE)
+=
gunze.o
obj-$(CONFIG_TOUCHSCREEN_ELO)
+=
elo.o
obj-$(CONFIG_TOUCHSCREEN_MTOUCH)
+=
mtouch.o
obj-$(CONFIG_TOUCHSCREEN_MTOUCH)
+=
mtouch.o
obj-$(CONFIG_TOUCHSCREEN_MK712)
+=
mk712.o
obj-$(CONFIG_TOUCHSCREEN_HP600)
+=
hp680_ts_input.o
drivers/input/touchscreen/hp680_ts_input.c
0 → 100644
View file @
93d33aa9
#include <linux/input.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#include <asm/delay.h>
#include <asm/adc.h>
#include <asm/hp6xx/hp6xx.h>
#define MODNAME "hp680_ts_input"
#define HP680_TS_ABS_X_MIN 40
#define HP680_TS_ABS_X_MAX 950
#define HP680_TS_ABS_Y_MIN 80
#define HP680_TS_ABS_Y_MAX 910
#define SCPCR 0xa4000116
#define PHDR 0xa400012e
#define SCPDR 0xa4000136
static
void
do_softint
(
void
*
data
);
static
struct
input_dev
hp680_ts_dev
;
static
DECLARE_WORK
(
work
,
do_softint
,
0
);
static
char
*
hp680_ts_name
=
"HP Jornada touchscreen"
;
static
char
*
hp680_ts_phys
=
"input0"
;
static
void
do_softint
(
void
*
data
)
{
int
absx
=
0
,
absy
=
0
;
u8
scpdr
;
int
touched
=
0
;
if
(
ctrl_inb
(
PHDR
)
&
PHDR_TS_PEN_DOWN
)
{
scpdr
=
ctrl_inb
(
SCPDR
);
scpdr
|=
SCPDR_TS_SCAN_ENABLE
;
scpdr
&=
~
SCPDR_TS_SCAN_Y
;
ctrl_outb
(
scpdr
,
SCPDR
);
udelay
(
30
);
absy
=
adc_single
(
ADC_CHANNEL_TS_Y
);
scpdr
=
ctrl_inb
(
SCPDR
);
scpdr
|=
SCPDR_TS_SCAN_Y
;
scpdr
&=
~
SCPDR_TS_SCAN_X
;
ctrl_outb
(
scpdr
,
SCPDR
);
udelay
(
30
);
absx
=
adc_single
(
ADC_CHANNEL_TS_X
);
scpdr
=
ctrl_inb
(
SCPDR
);
scpdr
|=
SCPDR_TS_SCAN_X
;
scpdr
&=
~
SCPDR_TS_SCAN_ENABLE
;
ctrl_outb
(
scpdr
,
SCPDR
);
udelay
(
100
);
touched
=
ctrl_inb
(
PHDR
)
&
PHDR_TS_PEN_DOWN
;
}
if
(
touched
)
{
input_report_key
(
&
hp680_ts_dev
,
BTN_TOUCH
,
1
);
input_report_abs
(
&
hp680_ts_dev
,
ABS_X
,
absx
);
input_report_abs
(
&
hp680_ts_dev
,
ABS_Y
,
absy
);
}
else
{
input_report_key
(
&
hp680_ts_dev
,
BTN_TOUCH
,
0
);
}
input_sync
(
&
hp680_ts_dev
);
enable_irq
(
HP680_TS_IRQ
);
}
static
irqreturn_t
hp680_ts_interrupt
(
int
irq
,
void
*
dev
,
struct
pt_regs
*
regs
)
{
disable_irq_nosync
(
irq
);
schedule_delayed_work
(
&
work
,
HZ
/
20
);
return
IRQ_HANDLED
;
}
static
int
__init
hp680_ts_init
(
void
)
{
u8
scpdr
;
u16
scpcr
;
scpdr
=
ctrl_inb
(
SCPDR
);
scpdr
|=
SCPDR_TS_SCAN_X
|
SCPDR_TS_SCAN_Y
;
scpdr
&=
~
SCPDR_TS_SCAN_ENABLE
;
ctrl_outb
(
scpdr
,
SCPDR
);
scpcr
=
ctrl_inw
(
SCPCR
);
scpcr
&=
~
SCPCR_TS_MASK
;
scpcr
|=
SCPCR_TS_ENABLE
;
ctrl_outw
(
scpcr
,
SCPCR
);
memset
(
&
hp680_ts_dev
,
0
,
sizeof
(
hp680_ts_dev
));
init_input_dev
(
&
hp680_ts_dev
);
hp680_ts_dev
.
evbit
[
0
]
=
BIT
(
EV_ABS
)
|
BIT
(
EV_KEY
);
hp680_ts_dev
.
absbit
[
0
]
=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
);
hp680_ts_dev
.
keybit
[
LONG
(
BTN_TOUCH
)]
=
BIT
(
BTN_TOUCH
);
hp680_ts_dev
.
absmin
[
ABS_X
]
=
HP680_TS_ABS_X_MIN
;
hp680_ts_dev
.
absmin
[
ABS_Y
]
=
HP680_TS_ABS_Y_MIN
;
hp680_ts_dev
.
absmax
[
ABS_X
]
=
HP680_TS_ABS_X_MAX
;
hp680_ts_dev
.
absmax
[
ABS_Y
]
=
HP680_TS_ABS_Y_MAX
;
hp680_ts_dev
.
name
=
hp680_ts_name
;
hp680_ts_dev
.
phys
=
hp680_ts_phys
;
input_register_device
(
&
hp680_ts_dev
);
if
(
request_irq
(
HP680_TS_IRQ
,
hp680_ts_interrupt
,
SA_INTERRUPT
,
MODNAME
,
0
)
<
0
)
{
printk
(
KERN_ERR
"hp680_touchscreen.c : Can't allocate irq %d
\n
"
,
HP680_TS_IRQ
);
input_unregister_device
(
&
hp680_ts_dev
);
return
-
EBUSY
;
}
return
0
;
}
static
void
__exit
hp680_ts_exit
(
void
)
{
free_irq
(
HP680_TS_IRQ
,
0
);
cancel_delayed_work
(
&
work
);
flush_scheduled_work
();
input_unregister_device
(
&
hp680_ts_dev
);
}
module_init
(
hp680_ts_init
);
module_exit
(
hp680_ts_exit
);
MODULE_AUTHOR
(
"Andriy Skulysh, askulysh@image.kiev.ua"
);
MODULE_DESCRIPTION
(
"HP Jornada 680 touchscreen driver"
);
MODULE_LICENSE
(
"GPL"
);
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