gamecon.c 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009
  1. /*
  2. * NES, SNES, N64, MultiSystem, PSX gamepad driver for Linux
  3. *
  4. * Copyright (c) 1999-2004 Vojtech Pavlik <vojtech@suse.cz>
  5. * Copyright (c) 2004 Peter Nelson <rufus-kernel@hackish.org>
  6. *
  7. * Based on the work of:
  8. * Andree Borrmann John Dahlstrom
  9. * David Kuder Nathan Hand
  10. * Raphael Assenat
  11. */
  12. /*
  13. * This program is free software; you can redistribute it and/or modify
  14. * it under the terms of the GNU General Public License as published by
  15. * the Free Software Foundation; either version 2 of the License, or
  16. * (at your option) any later version.
  17. *
  18. * This program is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. * GNU General Public License for more details.
  22. *
  23. * You should have received a copy of the GNU General Public License
  24. * along with this program; if not, write to the Free Software
  25. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  26. *
  27. * Should you need to contact me, the author, you can do so either by
  28. * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
  29. * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
  30. */
  31. #include <linux/kernel.h>
  32. #include <linux/delay.h>
  33. #include <linux/module.h>
  34. #include <linux/init.h>
  35. #include <linux/parport.h>
  36. #include <linux/input.h>
  37. #include <linux/mutex.h>
  38. MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
  39. MODULE_DESCRIPTION("NES, SNES, N64, MultiSystem, PSX gamepad driver");
  40. MODULE_LICENSE("GPL");
  41. #define GC_MAX_PORTS 3
  42. #define GC_MAX_DEVICES 5
  43. struct gc_config {
  44. int args[GC_MAX_DEVICES + 1];
  45. unsigned int nargs;
  46. };
  47. static struct gc_config gc_cfg[GC_MAX_PORTS] __initdata;
  48. module_param_array_named(map, gc_cfg[0].args, int, &gc_cfg[0].nargs, 0);
  49. MODULE_PARM_DESC(map, "Describes first set of devices (<parport#>,<pad1>,<pad2>,..<pad5>)");
  50. module_param_array_named(map2, gc_cfg[1].args, int, &gc_cfg[1].nargs, 0);
  51. MODULE_PARM_DESC(map2, "Describes second set of devices");
  52. module_param_array_named(map3, gc_cfg[2].args, int, &gc_cfg[2].nargs, 0);
  53. MODULE_PARM_DESC(map3, "Describes third set of devices");
  54. /* see also gs_psx_delay parameter in PSX support section */
  55. #define GC_SNES 1
  56. #define GC_NES 2
  57. #define GC_NES4 3
  58. #define GC_MULTI 4
  59. #define GC_MULTI2 5
  60. #define GC_N64 6
  61. #define GC_PSX 7
  62. #define GC_DDR 8
  63. #define GC_SNESMOUSE 9
  64. #define GC_MAX 9
  65. #define GC_REFRESH_TIME HZ/100
  66. struct gc {
  67. struct pardevice *pd;
  68. struct input_dev *dev[GC_MAX_DEVICES];
  69. struct timer_list timer;
  70. unsigned char pads[GC_MAX + 1];
  71. int used;
  72. struct mutex mutex;
  73. char phys[GC_MAX_DEVICES][32];
  74. };
  75. struct gc_subdev {
  76. unsigned int idx;
  77. };
  78. static struct gc *gc_base[3];
  79. static int gc_status_bit[] = { 0x40, 0x80, 0x20, 0x10, 0x08 };
  80. static char *gc_names[] = {
  81. NULL, "SNES pad", "NES pad", "NES FourPort", "Multisystem joystick",
  82. "Multisystem 2-button joystick", "N64 controller", "PSX controller",
  83. "PSX DDR controller", "SNES mouse"
  84. };
  85. /*
  86. * N64 support.
  87. */
  88. static unsigned char gc_n64_bytes[] = { 0, 1, 13, 15, 14, 12, 10, 11, 2, 3 };
  89. static short gc_n64_btn[] = {
  90. BTN_A, BTN_B, BTN_C, BTN_X, BTN_Y, BTN_Z,
  91. BTN_TL, BTN_TR, BTN_TRIGGER, BTN_START
  92. };
  93. #define GC_N64_LENGTH 32 /* N64 bit length, not including stop bit */
  94. #define GC_N64_STOP_LENGTH 5 /* Length of encoded stop bit */
  95. #define GC_N64_CMD_00 0x11111111UL
  96. #define GC_N64_CMD_01 0xd1111111UL
  97. #define GC_N64_CMD_03 0xdd111111UL
  98. #define GC_N64_CMD_1b 0xdd1dd111UL
  99. #define GC_N64_CMD_c0 0x111111ddUL
  100. #define GC_N64_CMD_80 0x1111111dUL
  101. #define GC_N64_STOP_BIT 0x1d /* Encoded stop bit */
  102. #define GC_N64_REQUEST_DATA GC_N64_CMD_01 /* the request data command */
  103. #define GC_N64_DELAY 133 /* delay between transmit request, and response ready (us) */
  104. #define GC_N64_DWS 3 /* delay between write segments (required for sound playback because of ISA DMA) */
  105. /* GC_N64_DWS > 24 is known to fail */
  106. #define GC_N64_POWER_W 0xe2 /* power during write (transmit request) */
  107. #define GC_N64_POWER_R 0xfd /* power during read */
  108. #define GC_N64_OUT 0x1d /* output bits to the 4 pads */
  109. /* Reading the main axes of any N64 pad is known to fail if the corresponding bit */
  110. /* in GC_N64_OUT is pulled low on the output port (by any routine) for more */
  111. /* than 123 us */
  112. #define GC_N64_CLOCK 0x02 /* clock bits for read */
  113. /*
  114. * Used for rumble code.
  115. */
  116. /* Send encoded command */
  117. static void gc_n64_send_command(struct gc *gc, unsigned long cmd,
  118. unsigned char target)
  119. {
  120. struct parport *port = gc->pd->port;
  121. int i;
  122. for (i = 0; i < GC_N64_LENGTH; i++) {
  123. unsigned char data = (cmd >> i) & 1 ? target : 0;
  124. parport_write_data(port, GC_N64_POWER_W | data);
  125. udelay(GC_N64_DWS);
  126. }
  127. }
  128. /* Send stop bit */
  129. static void gc_n64_send_stop_bit(struct gc *gc, unsigned char target)
  130. {
  131. struct parport *port = gc->pd->port;
  132. int i;
  133. for (i = 0; i < GC_N64_STOP_LENGTH; i++) {
  134. unsigned char data = (GC_N64_STOP_BIT >> i) & 1 ? target : 0;
  135. parport_write_data(port, GC_N64_POWER_W | data);
  136. udelay(GC_N64_DWS);
  137. }
  138. }
  139. /*
  140. * gc_n64_read_packet() reads an N64 packet.
  141. * Each pad uses one bit per byte. So all pads connected to this port
  142. * are read in parallel.
  143. */
  144. static void gc_n64_read_packet(struct gc *gc, unsigned char *data)
  145. {
  146. int i;
  147. unsigned long flags;
  148. /*
  149. * Request the pad to transmit data
  150. */
  151. local_irq_save(flags);
  152. gc_n64_send_command(gc, GC_N64_REQUEST_DATA, GC_N64_OUT);
  153. gc_n64_send_stop_bit(gc, GC_N64_OUT);
  154. local_irq_restore(flags);
  155. /*
  156. * Wait for the pad response to be loaded into the 33-bit register
  157. * of the adapter.
  158. */
  159. udelay(GC_N64_DELAY);
  160. /*
  161. * Grab data (ignoring the last bit, which is a stop bit)
  162. */
  163. for (i = 0; i < GC_N64_LENGTH; i++) {
  164. parport_write_data(gc->pd->port, GC_N64_POWER_R);
  165. udelay(2);
  166. data[i] = parport_read_status(gc->pd->port);
  167. parport_write_data(gc->pd->port, GC_N64_POWER_R | GC_N64_CLOCK);
  168. }
  169. /*
  170. * We must wait 200 ms here for the controller to reinitialize before
  171. * the next read request. No worries as long as gc_read is polled less
  172. * frequently than this.
  173. */
  174. }
  175. static void gc_n64_process_packet(struct gc *gc)
  176. {
  177. unsigned char data[GC_N64_LENGTH];
  178. struct input_dev *dev;
  179. int i, j, s;
  180. signed char x, y;
  181. gc_n64_read_packet(gc, data);
  182. for (i = 0; i < GC_MAX_DEVICES; i++) {
  183. dev = gc->dev[i];
  184. if (!dev)
  185. continue;
  186. s = gc_status_bit[i];
  187. if (s & gc->pads[GC_N64] & ~(data[8] | data[9])) {
  188. x = y = 0;
  189. for (j = 0; j < 8; j++) {
  190. if (data[23 - j] & s)
  191. x |= 1 << j;
  192. if (data[31 - j] & s)
  193. y |= 1 << j;
  194. }
  195. input_report_abs(dev, ABS_X, x);
  196. input_report_abs(dev, ABS_Y, -y);
  197. input_report_abs(dev, ABS_HAT0X,
  198. !(s & data[6]) - !(s & data[7]));
  199. input_report_abs(dev, ABS_HAT0Y,
  200. !(s & data[4]) - !(s & data[5]));
  201. for (j = 0; j < 10; j++)
  202. input_report_key(dev, gc_n64_btn[j],
  203. s & data[gc_n64_bytes[j]]);
  204. input_sync(dev);
  205. }
  206. }
  207. }
  208. static int gc_n64_play_effect(struct input_dev *dev, void *data,
  209. struct ff_effect *effect)
  210. {
  211. int i;
  212. unsigned long flags;
  213. struct gc *gc = input_get_drvdata(dev);
  214. struct gc_subdev *sdev = data;
  215. unsigned char target = 1 << sdev->idx; /* select desired pin */
  216. if (effect->type == FF_RUMBLE) {
  217. struct ff_rumble_effect *rumble = &effect->u.rumble;
  218. unsigned int cmd =
  219. rumble->strong_magnitude || rumble->weak_magnitude ?
  220. GC_N64_CMD_01 : GC_N64_CMD_00;
  221. local_irq_save(flags);
  222. /* Init Rumble - 0x03, 0x80, 0x01, (34)0x80 */
  223. gc_n64_send_command(gc, GC_N64_CMD_03, target);
  224. gc_n64_send_command(gc, GC_N64_CMD_80, target);
  225. gc_n64_send_command(gc, GC_N64_CMD_01, target);
  226. for (i = 0; i < 32; i++)
  227. gc_n64_send_command(gc, GC_N64_CMD_80, target);
  228. gc_n64_send_stop_bit(gc, target);
  229. udelay(GC_N64_DELAY);
  230. /* Now start or stop it - 0x03, 0xc0, 0zx1b, (32)0x01/0x00 */
  231. gc_n64_send_command(gc, GC_N64_CMD_03, target);
  232. gc_n64_send_command(gc, GC_N64_CMD_c0, target);
  233. gc_n64_send_command(gc, GC_N64_CMD_1b, target);
  234. for (i = 0; i < 32; i++)
  235. gc_n64_send_command(gc, cmd, target);
  236. gc_n64_send_stop_bit(gc, target);
  237. local_irq_restore(flags);
  238. }
  239. return 0;
  240. }
  241. static int __init gc_n64_init_ff(struct input_dev *dev, int i)
  242. {
  243. struct gc_subdev *sdev;
  244. int err;
  245. sdev = kmalloc(sizeof(*sdev), GFP_KERNEL);
  246. if (!sdev)
  247. return -ENOMEM;
  248. sdev->idx = i;
  249. input_set_capability(dev, EV_FF, FF_RUMBLE);
  250. err = input_ff_create_memless(dev, sdev, gc_n64_play_effect);
  251. if (err) {
  252. kfree(sdev);
  253. return err;
  254. }
  255. return 0;
  256. }
  257. /*
  258. * NES/SNES support.
  259. */
  260. #define GC_NES_DELAY 6 /* Delay between bits - 6us */
  261. #define GC_NES_LENGTH 8 /* The NES pads use 8 bits of data */
  262. #define GC_SNES_LENGTH 12 /* The SNES true length is 16, but the
  263. last 4 bits are unused */
  264. #define GC_SNESMOUSE_LENGTH 32 /* The SNES mouse uses 32 bits, the first
  265. 16 bits are equivalent to a gamepad */
  266. #define GC_NES_POWER 0xfc
  267. #define GC_NES_CLOCK 0x01
  268. #define GC_NES_LATCH 0x02
  269. static unsigned char gc_nes_bytes[] = { 0, 1, 2, 3 };
  270. static unsigned char gc_snes_bytes[] = { 8, 0, 2, 3, 9, 1, 10, 11 };
  271. static short gc_snes_btn[] = {
  272. BTN_A, BTN_B, BTN_SELECT, BTN_START, BTN_X, BTN_Y, BTN_TL, BTN_TR
  273. };
  274. /*
  275. * gc_nes_read_packet() reads a NES/SNES packet.
  276. * Each pad uses one bit per byte. So all pads connected to
  277. * this port are read in parallel.
  278. */
  279. static void gc_nes_read_packet(struct gc *gc, int length, unsigned char *data)
  280. {
  281. int i;
  282. parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK | GC_NES_LATCH);
  283. udelay(GC_NES_DELAY * 2);
  284. parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
  285. for (i = 0; i < length; i++) {
  286. udelay(GC_NES_DELAY);
  287. parport_write_data(gc->pd->port, GC_NES_POWER);
  288. data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
  289. udelay(GC_NES_DELAY);
  290. parport_write_data(gc->pd->port, GC_NES_POWER | GC_NES_CLOCK);
  291. }
  292. }
  293. static void gc_nes_process_packet(struct gc *gc)
  294. {
  295. unsigned char data[GC_SNESMOUSE_LENGTH];
  296. struct input_dev *dev;
  297. int i, j, s, len;
  298. char x_rel, y_rel;
  299. len = gc->pads[GC_SNESMOUSE] ? GC_SNESMOUSE_LENGTH :
  300. (gc->pads[GC_SNES] ? GC_SNES_LENGTH : GC_NES_LENGTH);
  301. gc_nes_read_packet(gc, len, data);
  302. for (i = 0; i < GC_MAX_DEVICES; i++) {
  303. dev = gc->dev[i];
  304. if (!dev)
  305. continue;
  306. s = gc_status_bit[i];
  307. if (s & (gc->pads[GC_NES] | gc->pads[GC_SNES])) {
  308. input_report_abs(dev, ABS_X, !(s & data[6]) - !(s & data[7]));
  309. input_report_abs(dev, ABS_Y, !(s & data[4]) - !(s & data[5]));
  310. }
  311. if (s & gc->pads[GC_NES])
  312. for (j = 0; j < 4; j++)
  313. input_report_key(dev, gc_snes_btn[j],
  314. s & data[gc_nes_bytes[j]]);
  315. if (s & gc->pads[GC_SNES])
  316. for (j = 0; j < 8; j++)
  317. input_report_key(dev, gc_snes_btn[j],
  318. s & data[gc_snes_bytes[j]]);
  319. if (s & gc->pads[GC_SNESMOUSE]) {
  320. /*
  321. * The 4 unused bits from SNES controllers appear
  322. * to be ID bits so use them to make sure we are
  323. * dealing with a mouse.
  324. * gamepad is connected. This is important since
  325. * my SNES gamepad sends 1's for bits 16-31, which
  326. * cause the mouse pointer to quickly move to the
  327. * upper left corner of the screen.
  328. */
  329. if (!(s & data[12]) && !(s & data[13]) &&
  330. !(s & data[14]) && (s & data[15])) {
  331. input_report_key(dev, BTN_LEFT, s & data[9]);
  332. input_report_key(dev, BTN_RIGHT, s & data[8]);
  333. x_rel = y_rel = 0;
  334. for (j = 0; j < 7; j++) {
  335. x_rel <<= 1;
  336. if (data[25 + j] & s)
  337. x_rel |= 1;
  338. y_rel <<= 1;
  339. if (data[17 + j] & s)
  340. y_rel |= 1;
  341. }
  342. if (x_rel) {
  343. if (data[24] & s)
  344. x_rel = -x_rel;
  345. input_report_rel(dev, REL_X, x_rel);
  346. }
  347. if (y_rel) {
  348. if (data[16] & s)
  349. y_rel = -y_rel;
  350. input_report_rel(dev, REL_Y, y_rel);
  351. }
  352. }
  353. }
  354. input_sync(dev);
  355. }
  356. }
  357. /*
  358. * Multisystem joystick support
  359. */
  360. #define GC_MULTI_LENGTH 5 /* Multi system joystick packet length is 5 */
  361. #define GC_MULTI2_LENGTH 6 /* One more bit for one more button */
  362. /*
  363. * gc_multi_read_packet() reads a Multisystem joystick packet.
  364. */
  365. static void gc_multi_read_packet(struct gc *gc, int length, unsigned char *data)
  366. {
  367. int i;
  368. for (i = 0; i < length; i++) {
  369. parport_write_data(gc->pd->port, ~(1 << i));
  370. data[i] = parport_read_status(gc->pd->port) ^ 0x7f;
  371. }
  372. }
  373. static void gc_multi_process_packet(struct gc *gc)
  374. {
  375. unsigned char data[GC_MULTI2_LENGTH];
  376. int data_len = gc->pads[GC_MULTI2] ? GC_MULTI2_LENGTH : GC_MULTI_LENGTH;
  377. struct input_dev *dev;
  378. int i, s;
  379. gc_multi_read_packet(gc, data_len, data);
  380. for (i = 0; i < GC_MAX_DEVICES; i++) {
  381. dev = gc->dev[i];
  382. if (!dev)
  383. continue;
  384. s = gc_status_bit[i];
  385. if (s & (gc->pads[GC_MULTI] | gc->pads[GC_MULTI2])) {
  386. input_report_abs(dev, ABS_X,
  387. !(s & data[2]) - !(s & data[3]));
  388. input_report_abs(dev, ABS_Y,
  389. !(s & data[0]) - !(s & data[1]));
  390. input_report_key(dev, BTN_TRIGGER, s & data[4]);
  391. }
  392. if (s & gc->pads[GC_MULTI2])
  393. input_report_key(dev, BTN_THUMB, s & data[5]);
  394. input_sync(dev);
  395. }
  396. }
  397. /*
  398. * PSX support
  399. *
  400. * See documentation at:
  401. * http://www.dim.com/~mackys/psxmemcard/ps-eng2.txt
  402. * http://www.gamesx.com/controldata/psxcont/psxcont.htm
  403. * ftp://milano.usal.es/pablo/
  404. *
  405. */
  406. #define GC_PSX_DELAY 25 /* 25 usec */
  407. #define GC_PSX_LENGTH 8 /* talk to the controller in bits */
  408. #define GC_PSX_BYTES 6 /* the maximum number of bytes to read off the controller */
  409. #define GC_PSX_MOUSE 1 /* Mouse */
  410. #define GC_PSX_NEGCON 2 /* NegCon */
  411. #define GC_PSX_NORMAL 4 /* Digital / Analog or Rumble in Digital mode */
  412. #define GC_PSX_ANALOG 5 /* Analog in Analog mode / Rumble in Green mode */
  413. #define GC_PSX_RUMBLE 7 /* Rumble in Red mode */
  414. #define GC_PSX_CLOCK 0x04 /* Pin 4 */
  415. #define GC_PSX_COMMAND 0x01 /* Pin 2 */
  416. #define GC_PSX_POWER 0xf8 /* Pins 5-9 */
  417. #define GC_PSX_SELECT 0x02 /* Pin 3 */
  418. #define GC_PSX_ID(x) ((x) >> 4) /* High nibble is device type */
  419. #define GC_PSX_LEN(x) (((x) & 0xf) << 1) /* Low nibble is length in bytes/2 */
  420. static int gc_psx_delay = GC_PSX_DELAY;
  421. module_param_named(psx_delay, gc_psx_delay, uint, 0);
  422. MODULE_PARM_DESC(psx_delay, "Delay when accessing Sony PSX controller (usecs)");
  423. static short gc_psx_abs[] = {
  424. ABS_X, ABS_Y, ABS_RX, ABS_RY, ABS_HAT0X, ABS_HAT0Y
  425. };
  426. static short gc_psx_btn[] = {
  427. BTN_TL, BTN_TR, BTN_TL2, BTN_TR2, BTN_A, BTN_B, BTN_X, BTN_Y,
  428. BTN_START, BTN_SELECT, BTN_THUMBL, BTN_THUMBR
  429. };
  430. static short gc_psx_ddr_btn[] = { BTN_0, BTN_1, BTN_2, BTN_3 };
  431. /*
  432. * gc_psx_command() writes 8bit command and reads 8bit data from
  433. * the psx pad.
  434. */
  435. static void gc_psx_command(struct gc *gc, int b, unsigned char *data)
  436. {
  437. struct parport *port = gc->pd->port;
  438. int i, j, cmd, read;
  439. memset(data, 0, GC_MAX_DEVICES);
  440. for (i = 0; i < GC_PSX_LENGTH; i++, b >>= 1) {
  441. cmd = (b & 1) ? GC_PSX_COMMAND : 0;
  442. parport_write_data(port, cmd | GC_PSX_POWER);
  443. udelay(gc_psx_delay);
  444. read = parport_read_status(port) ^ 0x80;
  445. for (j = 0; j < GC_MAX_DEVICES; j++)
  446. data[j] |= (read & gc_status_bit[j] & (gc->pads[GC_PSX] | gc->pads[GC_DDR])) ? (1 << i) : 0;
  447. parport_write_data(gc->pd->port, cmd | GC_PSX_CLOCK | GC_PSX_POWER);
  448. udelay(gc_psx_delay);
  449. }
  450. }
  451. /*
  452. * gc_psx_read_packet() reads a whole psx packet and returns
  453. * device identifier code.
  454. */
  455. static void gc_psx_read_packet(struct gc *gc, unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES],
  456. unsigned char id[GC_MAX_DEVICES])
  457. {
  458. int i, j, max_len = 0;
  459. unsigned long flags;
  460. unsigned char data2[GC_MAX_DEVICES];
  461. /* Select pad */
  462. parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
  463. udelay(gc_psx_delay);
  464. /* Deselect, begin command */
  465. parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_POWER);
  466. udelay(gc_psx_delay);
  467. local_irq_save(flags);
  468. gc_psx_command(gc, 0x01, data2); /* Access pad */
  469. gc_psx_command(gc, 0x42, id); /* Get device ids */
  470. gc_psx_command(gc, 0, data2); /* Dump status */
  471. /* Find the longest pad */
  472. for (i = 0; i < GC_MAX_DEVICES; i++)
  473. if ((gc_status_bit[i] & (gc->pads[GC_PSX] | gc->pads[GC_DDR])) &&
  474. GC_PSX_LEN(id[i]) > max_len &&
  475. GC_PSX_LEN(id[i]) <= GC_PSX_BYTES) {
  476. max_len = GC_PSX_LEN(id[i]);
  477. }
  478. /* Read in all the data */
  479. for (i = 0; i < max_len; i++) {
  480. gc_psx_command(gc, 0, data2);
  481. for (j = 0; j < GC_MAX_DEVICES; j++)
  482. data[j][i] = data2[j];
  483. }
  484. local_irq_restore(flags);
  485. parport_write_data(gc->pd->port, GC_PSX_CLOCK | GC_PSX_SELECT | GC_PSX_POWER);
  486. /* Set id's to the real value */
  487. for (i = 0; i < GC_MAX_DEVICES; i++)
  488. id[i] = GC_PSX_ID(id[i]);
  489. }
  490. static void gc_psx_report_one(struct gc *gc, struct input_dev *dev,
  491. unsigned char pad_type, unsigned char status_bit,
  492. unsigned char *data)
  493. {
  494. int i;
  495. switch (pad_type) {
  496. case GC_PSX_RUMBLE:
  497. input_report_key(dev, BTN_THUMBL, ~data[0] & 0x04);
  498. input_report_key(dev, BTN_THUMBR, ~data[0] & 0x02);
  499. case GC_PSX_NEGCON:
  500. case GC_PSX_ANALOG:
  501. if (gc->pads[GC_DDR] & status_bit) {
  502. for (i = 0; i < 4; i++)
  503. input_report_key(dev, gc_psx_ddr_btn[i],
  504. ~data[0] & (0x10 << i));
  505. } else {
  506. for (i = 0; i < 4; i++)
  507. input_report_abs(dev, gc_psx_abs[i + 2],
  508. data[i + 2]);
  509. input_report_abs(dev, ABS_X,
  510. !!(data[0] & 0x80) * 128 + !(data[0] & 0x20) * 127);
  511. input_report_abs(dev, ABS_Y,
  512. !!(data[0] & 0x10) * 128 + !(data[0] & 0x40) * 127);
  513. }
  514. for (i = 0; i < 8; i++)
  515. input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i));
  516. input_report_key(dev, BTN_START, ~data[0] & 0x08);
  517. input_report_key(dev, BTN_SELECT, ~data[0] & 0x01);
  518. input_sync(dev);
  519. break;
  520. case GC_PSX_NORMAL:
  521. if (gc->pads[GC_DDR] & status_bit) {
  522. for (i = 0; i < 4; i++)
  523. input_report_key(dev, gc_psx_ddr_btn[i],
  524. ~data[0] & (0x10 << i));
  525. } else {
  526. input_report_abs(dev, ABS_X,
  527. !!(data[0] & 0x80) * 128 + !(data[0] & 0x20) * 127);
  528. input_report_abs(dev, ABS_Y,
  529. !!(data[0] & 0x10) * 128 + !(data[0] & 0x40) * 127);
  530. /*
  531. * For some reason if the extra axes are left unset
  532. * they drift.
  533. * for (i = 0; i < 4; i++)
  534. input_report_abs(dev, gc_psx_abs[i + 2], 128);
  535. * This needs to be debugged properly,
  536. * maybe fuzz processing needs to be done
  537. * in input_sync()
  538. * --vojtech
  539. */
  540. }
  541. for (i = 0; i < 8; i++)
  542. input_report_key(dev, gc_psx_btn[i], ~data[1] & (1 << i));
  543. input_report_key(dev, BTN_START, ~data[0] & 0x08);
  544. input_report_key(dev, BTN_SELECT, ~data[0] & 0x01);
  545. input_sync(dev);
  546. break;
  547. case 0: /* not a pad, ignore */
  548. break;
  549. }
  550. }
  551. static void gc_psx_process_packet(struct gc *gc)
  552. {
  553. unsigned char data[GC_MAX_DEVICES][GC_PSX_BYTES];
  554. unsigned char id[GC_MAX_DEVICES];
  555. int i;
  556. gc_psx_read_packet(gc, data, id);
  557. for (i = 0; i < GC_MAX_DEVICES; i++) {
  558. if (gc->dev[i])
  559. gc_psx_report_one(gc, gc->dev[i],
  560. id[i], gc_status_bit[i], data[i]);
  561. }
  562. }
  563. /*
  564. * gc_timer() initiates reads of console pads data.
  565. */
  566. static void gc_timer(unsigned long private)
  567. {
  568. struct gc *gc = (void *) private;
  569. /*
  570. * N64 pads - must be read first, any read confuses them for 200 us
  571. */
  572. if (gc->pads[GC_N64])
  573. gc_n64_process_packet(gc);
  574. /*
  575. * NES and SNES pads or mouse
  576. */
  577. if (gc->pads[GC_NES] || gc->pads[GC_SNES] || gc->pads[GC_SNESMOUSE])
  578. gc_nes_process_packet(gc);
  579. /*
  580. * Multi and Multi2 joysticks
  581. */
  582. if (gc->pads[GC_MULTI] || gc->pads[GC_MULTI2])
  583. gc_multi_process_packet(gc);
  584. /*
  585. * PSX controllers
  586. */
  587. if (gc->pads[GC_PSX] || gc->pads[GC_DDR])
  588. gc_psx_process_packet(gc);
  589. mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
  590. }
  591. static int gc_open(struct input_dev *dev)
  592. {
  593. struct gc *gc = input_get_drvdata(dev);
  594. int err;
  595. err = mutex_lock_interruptible(&gc->mutex);
  596. if (err)
  597. return err;
  598. if (!gc->used++) {
  599. parport_claim(gc->pd);
  600. parport_write_control(gc->pd->port, 0x04);
  601. mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
  602. }
  603. mutex_unlock(&gc->mutex);
  604. return 0;
  605. }
  606. static void gc_close(struct input_dev *dev)
  607. {
  608. struct gc *gc = input_get_drvdata(dev);
  609. mutex_lock(&gc->mutex);
  610. if (!--gc->used) {
  611. del_timer_sync(&gc->timer);
  612. parport_write_control(gc->pd->port, 0x00);
  613. parport_release(gc->pd);
  614. }
  615. mutex_unlock(&gc->mutex);
  616. }
  617. static int __init gc_setup_pad(struct gc *gc, int idx, int pad_type)
  618. {
  619. struct input_dev *input_dev;
  620. int i;
  621. int err;
  622. if (!pad_type)
  623. return 0;
  624. if (pad_type < 1 || pad_type > GC_MAX) {
  625. printk(KERN_WARNING "gamecon.c: Pad type %d unknown\n", pad_type);
  626. return -EINVAL;
  627. }
  628. gc->dev[idx] = input_dev = input_allocate_device();
  629. if (!input_dev) {
  630. printk(KERN_ERR "gamecon.c: Not enough memory for input device\n");
  631. return -ENOMEM;
  632. }
  633. input_dev->name = gc_names[pad_type];
  634. input_dev->phys = gc->phys[idx];
  635. input_dev->id.bustype = BUS_PARPORT;
  636. input_dev->id.vendor = 0x0001;
  637. input_dev->id.product = pad_type;
  638. input_dev->id.version = 0x0100;
  639. input_set_drvdata(input_dev, gc);
  640. input_dev->open = gc_open;
  641. input_dev->close = gc_close;
  642. if (pad_type != GC_SNESMOUSE) {
  643. input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
  644. for (i = 0; i < 2; i++)
  645. input_set_abs_params(input_dev, ABS_X + i, -1, 1, 0, 0);
  646. } else
  647. input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
  648. gc->pads[0] |= gc_status_bit[idx];
  649. gc->pads[pad_type] |= gc_status_bit[idx];
  650. switch (pad_type) {
  651. case GC_N64:
  652. for (i = 0; i < 10; i++)
  653. __set_bit(gc_n64_btn[i], input_dev->keybit);
  654. for (i = 0; i < 2; i++) {
  655. input_set_abs_params(input_dev, ABS_X + i, -127, 126, 0, 2);
  656. input_set_abs_params(input_dev, ABS_HAT0X + i, -1, 1, 0, 0);
  657. }
  658. err = gc_n64_init_ff(input_dev, idx);
  659. if (err) {
  660. printk(KERN_WARNING "gamecon.c: Failed to initiate rumble for N64 device %d\n", idx);
  661. input_free_device(input_dev);
  662. return err;
  663. }
  664. break;
  665. case GC_SNESMOUSE:
  666. __set_bit(BTN_LEFT, input_dev->keybit);
  667. __set_bit(BTN_RIGHT, input_dev->keybit);
  668. __set_bit(REL_X, input_dev->relbit);
  669. __set_bit(REL_Y, input_dev->relbit);
  670. break;
  671. case GC_SNES:
  672. for (i = 4; i < 8; i++)
  673. __set_bit(gc_snes_btn[i], input_dev->keybit);
  674. case GC_NES:
  675. for (i = 0; i < 4; i++)
  676. __set_bit(gc_snes_btn[i], input_dev->keybit);
  677. break;
  678. case GC_MULTI2:
  679. __set_bit(BTN_THUMB, input_dev->keybit);
  680. case GC_MULTI:
  681. __set_bit(BTN_TRIGGER, input_dev->keybit);
  682. break;
  683. case GC_PSX:
  684. for (i = 0; i < 6; i++)
  685. input_set_abs_params(input_dev,
  686. gc_psx_abs[i], 4, 252, 0, 2);
  687. for (i = 0; i < 12; i++)
  688. __set_bit(gc_psx_btn[i], input_dev->keybit);
  689. break;
  690. case GC_DDR:
  691. for (i = 0; i < 4; i++)
  692. __set_bit(gc_psx_ddr_btn[i], input_dev->keybit);
  693. for (i = 0; i < 12; i++)
  694. __set_bit(gc_psx_btn[i], input_dev->keybit);
  695. break;
  696. }
  697. return 0;
  698. }
  699. static struct gc __init *gc_probe(int parport, int *pads, int n_pads)
  700. {
  701. struct gc *gc;
  702. struct parport *pp;
  703. struct pardevice *pd;
  704. int i;
  705. int err;
  706. pp = parport_find_number(parport);
  707. if (!pp) {
  708. printk(KERN_ERR "gamecon.c: no such parport\n");
  709. err = -EINVAL;
  710. goto err_out;
  711. }
  712. pd = parport_register_device(pp, "gamecon", NULL, NULL, NULL, PARPORT_DEV_EXCL, NULL);
  713. if (!pd) {
  714. printk(KERN_ERR "gamecon.c: parport busy already - lp.o loaded?\n");
  715. err = -EBUSY;
  716. goto err_put_pp;
  717. }
  718. gc = kzalloc(sizeof(struct gc), GFP_KERNEL);
  719. if (!gc) {
  720. printk(KERN_ERR "gamecon.c: Not enough memory\n");
  721. err = -ENOMEM;
  722. goto err_unreg_pardev;
  723. }
  724. mutex_init(&gc->mutex);
  725. gc->pd = pd;
  726. setup_timer(&gc->timer, gc_timer, (long) gc);
  727. for (i = 0; i < n_pads && i < GC_MAX_DEVICES; i++) {
  728. if (!pads[i])
  729. continue;
  730. snprintf(gc->phys[i], sizeof(gc->phys[i]),
  731. "%s/input%d", gc->pd->port->name, i);
  732. err = gc_setup_pad(gc, i, pads[i]);
  733. if (err)
  734. goto err_unreg_devs;
  735. err = input_register_device(gc->dev[i]);
  736. if (err)
  737. goto err_free_dev;
  738. }
  739. if (!gc->pads[0]) {
  740. printk(KERN_ERR "gamecon.c: No valid devices specified\n");
  741. err = -EINVAL;
  742. goto err_free_gc;
  743. }
  744. parport_put_port(pp);
  745. return gc;
  746. err_free_dev:
  747. input_free_device(gc->dev[i]);
  748. err_unreg_devs:
  749. while (--i >= 0)
  750. if (gc->dev[i])
  751. input_unregister_device(gc->dev[i]);
  752. err_free_gc:
  753. kfree(gc);
  754. err_unreg_pardev:
  755. parport_unregister_device(pd);
  756. err_put_pp:
  757. parport_put_port(pp);
  758. err_out:
  759. return ERR_PTR(err);
  760. }
  761. static void gc_remove(struct gc *gc)
  762. {
  763. int i;
  764. for (i = 0; i < GC_MAX_DEVICES; i++)
  765. if (gc->dev[i])
  766. input_unregister_device(gc->dev[i]);
  767. parport_unregister_device(gc->pd);
  768. kfree(gc);
  769. }
  770. static int __init gc_init(void)
  771. {
  772. int i;
  773. int have_dev = 0;
  774. int err = 0;
  775. for (i = 0; i < GC_MAX_PORTS; i++) {
  776. if (gc_cfg[i].nargs == 0 || gc_cfg[i].args[0] < 0)
  777. continue;
  778. if (gc_cfg[i].nargs < 2) {
  779. printk(KERN_ERR "gamecon.c: at least one device must be specified\n");
  780. err = -EINVAL;
  781. break;
  782. }
  783. gc_base[i] = gc_probe(gc_cfg[i].args[0],
  784. gc_cfg[i].args + 1, gc_cfg[i].nargs - 1);
  785. if (IS_ERR(gc_base[i])) {
  786. err = PTR_ERR(gc_base[i]);
  787. break;
  788. }
  789. have_dev = 1;
  790. }
  791. if (err) {
  792. while (--i >= 0)
  793. if (gc_base[i])
  794. gc_remove(gc_base[i]);
  795. return err;
  796. }
  797. return have_dev ? 0 : -ENODEV;
  798. }
  799. static void __exit gc_exit(void)
  800. {
  801. int i;
  802. for (i = 0; i < GC_MAX_PORTS; i++)
  803. if (gc_base[i])
  804. gc_remove(gc_base[i]);
  805. }
  806. module_init(gc_init);
  807. module_exit(gc_exit);