3 extern struct tpd_device
*tpd
;
5 //#ifdef TPD_HAVE_BUTTON
6 //static int tpd_keys[TPD_KEY_COUNT] = TPD_KEYS;
7 //static int tpd_keys_dim[TPD_KEY_COUNT][4] = TPD_KEYS_DIM;
8 static unsigned int tpd_keycnt
= 0;
9 static int tpd_keys
[TPD_VIRTUAL_KEY_MAX
]={0};
10 static int tpd_keys_dim
[TPD_VIRTUAL_KEY_MAX
][4];// = {0};
11 static ssize_t
mtk_virtual_keys_show(struct kobject
*kobj
,
12 struct kobj_attribute
*attr
, char *buf
) {
14 for(i
=0, j
=0;i
<tpd_keycnt
;i
++)
15 j
+=sprintf(buf
, "%s%s:%d:%d:%d:%d:%d%s",buf
,
16 __stringify(EV_KEY
),tpd_keys
[i
],
17 tpd_keys_dim
[i
][0],tpd_keys_dim
[i
][1],
18 tpd_keys_dim
[i
][2],tpd_keys_dim
[i
][3],
19 (i
==tpd_keycnt
-1?"\n":":"));
23 static struct kobj_attribute mtk_virtual_keys_attr
= {
25 .name
= "virtualkeys.mtk-tpd",
28 .show
= &mtk_virtual_keys_show
,
31 static struct attribute
*mtk_properties_attrs
[] = {
32 &mtk_virtual_keys_attr
.attr
,
36 static struct attribute_group mtk_properties_attr_group
= {
37 .attrs
= mtk_properties_attrs
,
40 struct kobject
*properties_kobj
;
42 void tpd_button_init(void) {
45 for(i
=0; i
<TPD_VIRTUAL_KEY_MAX
; i
++)
53 // if((tpd->kpd=input_allocate_device())==NULL) return -ENOMEM;
54 tpd
->kpd
=input_allocate_device();
55 /* struct input_dev kpd initialization and registration */
56 tpd
->kpd
->name
= TPD_DEVICE
"-kpd";
57 set_bit(EV_KEY
, tpd
->kpd
->evbit
);
58 //set_bit(EV_REL, tpd->kpd->evbit);
59 //set_bit(EV_ABS, tpd->kpd->evbit);
60 for(i
=0;i
<tpd_keycnt
;i
++)
61 __set_bit(tpd_keys
[i
], tpd
->kpd
->keybit
);
62 tpd
->kpd
->id
.bustype
= BUS_HOST
;
63 tpd
->kpd
->id
.vendor
= 0x0001;
64 tpd
->kpd
->id
.product
= 0x0001;
65 tpd
->kpd
->id
.version
= 0x0100;
66 if(input_register_device(tpd
->kpd
))
67 TPD_DMESG("input_register_device failed.(kpd)\n");
68 set_bit(EV_KEY
, tpd
->dev
->evbit
);
69 for(i
=0;i
<tpd_keycnt
;i
++)
70 __set_bit(tpd_keys
[i
], tpd
->dev
->keybit
);
71 properties_kobj
= kobject_create_and_add("board_properties", NULL
);
73 ret
= sysfs_create_group(properties_kobj
,&mtk_properties_attr_group
);
74 if(!properties_kobj
|| ret
)
75 printk("failed to create board_properties\n");
78 void tpd_button(unsigned int x
, unsigned int y
, unsigned int down
) {
81 for(i
=0;i
<tpd_keycnt
;i
++)
83 if(x
>=tpd_keys_dim
[i
][0]-(tpd_keys_dim
[i
][2]/2) &&
84 x
<=tpd_keys_dim
[i
][0]+(tpd_keys_dim
[i
][2]/2) &&
85 y
>=tpd_keys_dim
[i
][1]-(tpd_keys_dim
[i
][3]/2) &&
86 y
<=tpd_keys_dim
[i
][1]+(tpd_keys_dim
[i
][3]/2) &&
87 !(tpd
->btn_state
&(1<<i
)))
89 input_report_key(tpd
->kpd
, tpd_keys
[i
], 1);
91 tpd
->btn_state
|=(1<<i
);
92 TPD_DEBUG("[mtk-tpd] press key %d (%d)\n",i
, tpd_keys
[i
]);
93 printk("[mtk-tpd] press key %d (%d)\n",i
, tpd_keys
[i
]);
97 for(i
=0;i
<tpd_keycnt
;i
++) {
98 if(tpd
->btn_state
&(1<<i
)) {
99 input_report_key(tpd
->kpd
, tpd_keys
[i
], 0);
100 input_sync(tpd
->kpd
);
101 TPD_DEBUG("[mtk-tpd] release key %d (%d)\n",i
, tpd_keys
[i
]);
102 printk("[mtk-tpd] release key %d (%d)\n",i
, tpd_keys
[i
]);
108 void tpd_button_setting(int keycnt
, void *keys
, void *keys_dim
)
111 memcpy(tpd_keys
, keys
, keycnt
*4);
112 memcpy(tpd_keys_dim
, keys_dim
, keycnt
*4*4);