em28xx-input.c 23.9 KB
Newer Older
1
/*
2 3 4 5
  handle em28xx IR remotes via linux kernel input layer.

   Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
		      Markus Rechberger <mrechberger@gmail.com>
6
		      Mauro Carvalho Chehab <mchehab@infradead.org>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
		      Sascha Sommer <saschasommer@freenet.de>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 23 24 25 26 27 28
 */

#include <linux/module.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/usb.h>
29
#include <linux/slab.h>
30
#include <linux/bitrev.h>
31

32
#include "em28xx.h"
33

34 35 36
#define EM28XX_SNAPSHOT_KEY				KEY_CAMERA
#define EM28XX_BUTTONS_DEBOUNCED_QUERY_INTERVAL		500 /* [ms] */
#define EM28XX_BUTTONS_VOLATILE_QUERY_INTERVAL		100 /* [ms] */
37

38
static unsigned int ir_debug;
39
module_param(ir_debug, int, 0644);
40
MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]");
41

42 43
#define MODULE_NAME "em28xx"

44 45 46 47 48 49 50 51 52
#define dprintk(fmt, arg...) \
	if (ir_debug) { \
		printk(KERN_DEBUG "%s/ir: " fmt, ir->name , ## arg); \
	}

/**********************************************************
 Polling structure used by em28xx IR's
 **********************************************************/

53 54 55
struct em28xx_ir_poll_result {
	unsigned int toggle_bit:1;
	unsigned int read_count:7;
56

57
	enum rc_type protocol;
58
	u32 scancode;
59 60
};

61 62
struct em28xx_IR {
	struct em28xx *dev;
63
	struct rc_dev *rc;
64 65 66
	char name[32];
	char phys[32];

67
	/* poll decoder */
68
	int polling;
69
	struct delayed_work work;
70
	unsigned int full_code:1;
71
	unsigned int last_readcount;
72
	u64 rc_type;
73

74 75
	/* i2c slave address of external device (if used) */
	u16 i2c_dev_addr;
76

77
	int  (*get_key_i2c)(struct i2c_client *ir, enum rc_type *protocol, u32 *scancode);
78
	int  (*get_key)(struct em28xx_IR *, struct em28xx_ir_poll_result *);
79 80 81 82 83
};

/**********************************************************
 I2C IR based get keycodes - should be used with ir-kbd-i2c
 **********************************************************/
84

85 86
static int em28xx_get_key_terratec(struct i2c_client *i2c_dev,
				   enum rc_type *protocol, u32 *scancode)
87 88 89 90
{
	unsigned char b;

	/* poll IR chip */
91
	if (1 != i2c_master_recv(i2c_dev, &b, 1))
92 93 94
		return -EIO;

	/* it seems that 0xFE indicates that a button is still hold
95
	   down, while 0xff indicates that no button is hold down. */
96

97
	if (b == 0xff)
98 99
		return 0;

100
	if (b == 0xfe)
101 102 103
		/* keep old data */
		return 1;

104 105
	*protocol = RC_TYPE_UNKNOWN;
	*scancode = b;
106 107 108
	return 1;
}

109 110
static int em28xx_get_key_em_haup(struct i2c_client *i2c_dev,
				  enum rc_type *protocol, u32 *scancode)
111 112
{
	unsigned char buf[2];
113
	int size;
114 115

	/* poll IR chip */
116
	size = i2c_master_recv(i2c_dev, buf, sizeof(buf));
117 118

	if (size != 2)
119 120 121
		return -EIO;

	/* Does eliminate repeated parity code */
122
	if (buf[1] == 0xff)
123 124
		return 0;

125 126 127 128 129 130 131 132 133
	/*
	 * Rearranges bits to the right order.
	 * The bit order were determined experimentally by using
	 * The original Hauppauge Grey IR and another RC5 that uses addr=0x08
	 * The RC5 code has 14 bits, but we've experimentally determined
	 * the meaning for only 11 bits.
	 * So, the code translation is not complete. Yet, it is enough to
	 * work with the provided RC5 IR.
	 */
134 135
	*protocol = RC_TYPE_RC5;
	*scancode = (bitrev8(buf[1]) & 0x1f) << 8 | bitrev8(buf[0]) >> 2;
136 137 138
	return 1;
}

139
static int em28xx_get_key_pinnacle_usb_grey(struct i2c_client *i2c_dev,
140
					    enum rc_type *protocol, u32 *scancode)
141 142 143 144 145
{
	unsigned char buf[3];

	/* poll IR chip */

146
	if (3 != i2c_master_recv(i2c_dev, buf, 3))
147 148
		return -EIO;

149
	if (buf[0] != 0x00)
150 151
		return 0;

152 153
	*protocol = RC_TYPE_UNKNOWN;
	*scancode = buf[2] & 0x3f;
154 155 156
	return 1;
}

157
static int em28xx_get_key_winfast_usbii_deluxe(struct i2c_client *i2c_dev,
158
					       enum rc_type *protocol, u32 *scancode)
159 160 161
{
	unsigned char subaddr, keydetect, key;

162
	struct i2c_msg msg[] = { { .addr = i2c_dev->addr, .flags = 0, .buf = &subaddr, .len = 1},
163
				 { .addr = i2c_dev->addr, .flags = I2C_M_RD, .buf = &keydetect, .len = 1} };
164 165

	subaddr = 0x10;
166
	if (2 != i2c_transfer(i2c_dev->adapter, msg, 2))
167 168 169 170 171 172
		return -EIO;
	if (keydetect == 0x00)
		return 0;

	subaddr = 0x00;
	msg[1].buf = &key;
173
	if (2 != i2c_transfer(i2c_dev->adapter, msg, 2))
174
		return -EIO;
175 176 177
	if (key == 0x00)
		return 0;

178 179
	*protocol = RC_TYPE_UNKNOWN;
	*scancode = key;
180 181 182
	return 1;
}

183 184 185 186
/**********************************************************
 Poll based get keycode functions
 **********************************************************/

187 188 189
/* This is for the em2860/em2880 */
static int default_polling_getkey(struct em28xx_IR *ir,
				  struct em28xx_ir_poll_result *poll_result)
190 191 192
{
	struct em28xx *dev = ir->dev;
	int rc;
193
	u8 msg[3] = { 0, 0, 0 };
194

195 196 197
	/* Read key toggle, brand, and key code
	   on registers 0x45, 0x46 and 0x47
	 */
198
	rc = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R45_IR,
199
					  msg, sizeof(msg));
200 201 202
	if (rc < 0)
		return rc;

203 204 205 206 207 208
	/* Infrared toggle (Reg 0x45[7]) */
	poll_result->toggle_bit = (msg[0] >> 7);

	/* Infrared read count (Reg 0x45[6:0] */
	poll_result->read_count = (msg[0] & 0x7f);

209
	/* Remote Control Address/Data (Regs 0x46/0x47) */
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
	switch (ir->rc_type) {
	case RC_BIT_RC5:
		poll_result->protocol = RC_TYPE_RC5;
		poll_result->scancode = RC_SCANCODE_RC5(msg[1], msg[2]);
		break;

	case RC_BIT_NEC:
		poll_result->protocol = RC_TYPE_NEC;
		poll_result->scancode = RC_SCANCODE_NEC(msg[1], msg[2]);
		break;

	default:
		poll_result->protocol = RC_TYPE_UNKNOWN;
		poll_result->scancode = msg[1] << 8 | msg[2];
		break;
	}
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250

	return 0;
}

static int em2874_polling_getkey(struct em28xx_IR *ir,
				 struct em28xx_ir_poll_result *poll_result)
{
	struct em28xx *dev = ir->dev;
	int rc;
	u8 msg[5] = { 0, 0, 0, 0, 0 };

	/* Read key toggle, brand, and key code
	   on registers 0x51-55
	 */
	rc = dev->em28xx_read_reg_req_len(dev, 0, EM2874_R51_IR,
					  msg, sizeof(msg));
	if (rc < 0)
		return rc;

	/* Infrared toggle (Reg 0x51[7]) */
	poll_result->toggle_bit = (msg[0] >> 7);

	/* Infrared read count (Reg 0x51[6:0] */
	poll_result->read_count = (msg[0] & 0x7f);

251 252 253 254 255 256
	/*
	 * Remote Control Address (Reg 0x52)
	 * Remote Control Data (Reg 0x53-0x55)
	 */
	switch (ir->rc_type) {
	case RC_BIT_RC5:
257 258
		poll_result->protocol = RC_TYPE_RC5;
		poll_result->scancode = RC_SCANCODE_RC5(msg[1], msg[2]);
259
		break;
260

261
	case RC_BIT_NEC:
262 263
		poll_result->protocol = RC_TYPE_RC5;
		poll_result->scancode = msg[1] << 8 | msg[2];
264
		if ((msg[3] ^ msg[4]) != 0xff)		/* 32 bits NEC */
265 266 267 268
			poll_result->scancode = RC_SCANCODE_NEC32((msg[1] << 24) |
								  (msg[2] << 16) |
								  (msg[3] << 8)  |
								  (msg[4]));
269
		else if ((msg[1] ^ msg[2]) != 0xff)	/* 24 bits NEC */
270 271
			poll_result->scancode = RC_SCANCODE_NECX(msg[1] << 8 |
								 msg[2], msg[3]);
272
		else					/* Normal NEC */
273
			poll_result->scancode = RC_SCANCODE_NEC(msg[1], msg[3]);
274
		break;
275

276
	case RC_BIT_RC6_0:
277 278
		poll_result->protocol = RC_TYPE_RC6_0;
		poll_result->scancode = RC_SCANCODE_RC6_0(msg[1], msg[2]);
279
		break;
280

281
	default:
282
		poll_result->protocol = RC_TYPE_UNKNOWN;
283 284 285 286
		poll_result->scancode = (msg[1] << 24) | (msg[2] << 16) |
					(msg[3] << 8)  | msg[4];
		break;
	}
287 288

	return 0;
289 290 291 292 293 294
}

/**********************************************************
 Polling code for em28xx
 **********************************************************/

295 296
static int em28xx_i2c_ir_handle_key(struct em28xx_IR *ir)
{
297
	struct em28xx *dev = ir->dev;
298 299
	static u32 scancode;
	enum rc_type protocol;
300
	int rc;
301
	struct i2c_client client;
302

303
	client.adapter = &ir->dev->i2c_adap[dev->def_i2c_bus];
304 305
	client.addr = ir->i2c_dev_addr;

306
	rc = ir->get_key_i2c(&client, &protocol, &scancode);
307 308 309 310 311 312
	if (rc < 0) {
		dprintk("ir->get_key_i2c() failed: %d\n", rc);
		return rc;
	}

	if (rc) {
313 314 315
		dprintk("%s: proto = 0x%04x, scancode = 0x%04x\n",
			__func__, protocol, scancode);
		rc_keydown(ir->rc, protocol, scancode, 0);
316 317 318 319
	}
	return 0;
}

320 321
static void em28xx_ir_handle_key(struct em28xx_IR *ir)
{
322 323 324 325 326
	int result;
	struct em28xx_ir_poll_result poll_result;

	/* read the registers containing the IR status */
	result = ir->get_key(ir, &poll_result);
327
	if (unlikely(result < 0)) {
328
		dprintk("ir->get_key() failed: %d\n", result);
329
		return;
330
	}
331

332
	if (unlikely(poll_result.read_count != ir->last_readcount)) {
333
		dprintk("%s: toggle: %d, count: %d, key 0x%04x\n", __func__,
334
			poll_result.toggle_bit, poll_result.read_count,
335
			poll_result.scancode);
336
		if (ir->full_code)
337
			rc_keydown(ir->rc,
338
				   poll_result.protocol,
339
				   poll_result.scancode,
340 341
				   poll_result.toggle_bit);
		else
342
			rc_keydown(ir->rc,
343
				   RC_TYPE_UNKNOWN,
344
				   poll_result.scancode & 0xff,
345 346
				   poll_result.toggle_bit);

347 348
		if (ir->dev->chip_id == CHIP_ID_EM2874 ||
		    ir->dev->chip_id == CHIP_ID_EM2884)
349 350 351 352 353 354 355 356 357
			/* The em2874 clears the readcount field every time the
			   register is read.  The em2860/2880 datasheet says that it
			   is supposed to clear the readcount, but it doesn't.  So with
			   the em2874, we are looking for a non-zero read count as
			   opposed to a readcount that is incrementing */
			ir->last_readcount = 0;
		else
			ir->last_readcount = poll_result.read_count;
	}
358 359 360 361
}

static void em28xx_ir_work(struct work_struct *work)
{
362
	struct em28xx_IR *ir = container_of(work, struct em28xx_IR, work.work);
363

364 365 366 367
	if (ir->i2c_dev_addr) /* external i2c device */
		em28xx_i2c_ir_handle_key(ir);
	else /* internal device */
		em28xx_ir_handle_key(ir);
368
	schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling));
369 370
}

371
static int em28xx_ir_start(struct rc_dev *rc)
372
{
373
	struct em28xx_IR *ir = rc->priv;
374

375
	INIT_DELAYED_WORK(&ir->work, em28xx_ir_work);
376
	schedule_delayed_work(&ir->work, 0);
377 378

	return 0;
379 380
}

381
static void em28xx_ir_stop(struct rc_dev *rc)
382
{
383
	struct em28xx_IR *ir = rc->priv;
384

385
	cancel_delayed_work_sync(&ir->work);
386 387
}

388
static int em2860_ir_change_protocol(struct rc_dev *rc_dev, u64 *rc_type)
389
{
390
	struct em28xx_IR *ir = rc_dev->priv;
391
	struct em28xx *dev = ir->dev;
392

393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411
	/* Adjust xclk based on IR table for RC5/NEC tables */
	if (*rc_type & RC_BIT_RC5) {
		dev->board.xclk |= EM28XX_XCLK_IR_RC5_MODE;
		ir->full_code = 1;
		*rc_type = RC_BIT_RC5;
	} else if (*rc_type & RC_BIT_NEC) {
		dev->board.xclk &= ~EM28XX_XCLK_IR_RC5_MODE;
		ir->full_code = 1;
		*rc_type = RC_BIT_NEC;
	} else if (*rc_type & RC_BIT_UNKNOWN) {
		*rc_type = RC_BIT_UNKNOWN;
	} else {
		*rc_type = ir->rc_type;
		return -EINVAL;
	}
	em28xx_write_reg_bits(dev, EM28XX_R0F_XCLK, dev->board.xclk,
			      EM28XX_XCLK_IR_RC5_MODE);

	ir->rc_type = *rc_type;
412

413 414 415 416 417 418 419 420 421 422
	return 0;
}

static int em2874_ir_change_protocol(struct rc_dev *rc_dev, u64 *rc_type)
{
	struct em28xx_IR *ir = rc_dev->priv;
	struct em28xx *dev = ir->dev;
	u8 ir_config = EM2874_IR_RC5;

	/* Adjust xclk and set type based on IR table for RC5/NEC/RC6 tables */
423
	if (*rc_type & RC_BIT_RC5) {
424 425
		dev->board.xclk |= EM28XX_XCLK_IR_RC5_MODE;
		ir->full_code = 1;
426 427
		*rc_type = RC_BIT_RC5;
	} else if (*rc_type & RC_BIT_NEC) {
428
		dev->board.xclk &= ~EM28XX_XCLK_IR_RC5_MODE;
429
		ir_config = EM2874_IR_NEC | EM2874_IR_NEC_NO_PARITY;
430
		ir->full_code = 1;
431
		*rc_type = RC_BIT_NEC;
432 433 434 435 436 437 438 439 440 441 442 443
	} else if (*rc_type & RC_BIT_RC6_0) {
		dev->board.xclk |= EM28XX_XCLK_IR_RC5_MODE;
		ir_config = EM2874_IR_RC6_MODE_0;
		ir->full_code = 1;
		*rc_type = RC_BIT_RC6_0;
	} else if (*rc_type & RC_BIT_UNKNOWN) {
		*rc_type = RC_BIT_UNKNOWN;
	} else {
		*rc_type = ir->rc_type;
		return -EINVAL;
	}
	em28xx_write_regs(dev, EM2874_R50_IR_CONFIG, &ir_config, 1);
444 445
	em28xx_write_reg_bits(dev, EM28XX_R0F_XCLK, dev->board.xclk,
			      EM28XX_XCLK_IR_RC5_MODE);
446

447 448 449 450 451 452 453 454 455
	ir->rc_type = *rc_type;

	return 0;
}
static int em28xx_ir_change_protocol(struct rc_dev *rc_dev, u64 *rc_type)
{
	struct em28xx_IR *ir = rc_dev->priv;
	struct em28xx *dev = ir->dev;

456 457 458 459
	/* Setup the proper handler based on the chip */
	switch (dev->chip_id) {
	case CHIP_ID_EM2860:
	case CHIP_ID_EM2883:
460
		return em2860_ir_change_protocol(rc_dev, rc_type);
461
	case CHIP_ID_EM2884:
462
	case CHIP_ID_EM2874:
463
	case CHIP_ID_EM28174:
464
	case CHIP_ID_EM28178:
465
		return em2874_ir_change_protocol(rc_dev, rc_type);
466
	default:
467 468
		printk("Unrecognized em28xx chip id 0x%02x: IR not supported\n",
			dev->chip_id);
469
		return -EINVAL;
470 471 472
	}
}

473
static int em28xx_probe_i2c_ir(struct em28xx *dev)
474
{
475
	int i = 0;
476 477 478 479 480 481 482
	/* Leadtek winfast tv USBII deluxe can find a non working IR-device */
	/* at address 0x18, so if that address is needed for another board in */
	/* the future, please put it after 0x1f. */
	const unsigned short addr_list[] = {
		 0x1f, 0x30, 0x47, I2C_CLIENT_END
	};

483
	while (addr_list[i] != I2C_CLIENT_END) {
484
		if (i2c_probe_func_quick_read(&dev->i2c_adap[dev->def_i2c_bus], addr_list[i]) == 1)
485
			return addr_list[i];
486
		i++;
487 488
	}

489
	return -ENODEV;
490 491
}

492
/**********************************************************
493
 Handle buttons
494 495
 **********************************************************/

496
static void em28xx_query_buttons(struct work_struct *work)
497 498
{
	struct em28xx *dev =
499 500 501
		container_of(work, struct em28xx, buttons_query_work.work);
	u8 i, j;
	int regval;
502
	bool is_pressed, was_pressed;
503
	const struct em28xx_led *led;
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520

	/* Poll and evaluate all addresses */
	for (i = 0; i < dev->num_button_polling_addresses; i++) {
		/* Read value from register */
		regval = em28xx_read_reg(dev, dev->button_polling_addresses[i]);
		if (regval < 0)
			continue;
		/* Check states of the buttons and act */
		j = 0;
		while (dev->board.buttons[j].role >= 0 &&
			 dev->board.buttons[j].role < EM28XX_NUM_BUTTON_ROLES) {
			struct em28xx_button *button = &dev->board.buttons[j];
			/* Check if button uses the current address */
			if (button->reg_r != dev->button_polling_addresses[i]) {
				j++;
				continue;
			}
521 522 523 524 525 526 527 528 529 530 531 532 533
			/* Determine if button is and was pressed last time */
			is_pressed = regval & button->mask;
			was_pressed = dev->button_polling_last_values[i]
				       & button->mask;
			if (button->inverted) {
				is_pressed = !is_pressed;
				was_pressed = !was_pressed;
			}
			/* Clear button state (if needed) */
			if (is_pressed && button->reg_clearing)
				em28xx_write_reg(dev, button->reg_clearing,
						 (~regval & button->mask)
						    | (regval & ~button->mask));
534
			/* Handle button state */
535
			if (!is_pressed || was_pressed) {
536 537 538 539 540 541 542 543 544 545 546 547
				j++;
				continue;
			}
			switch (button->role) {
			case EM28XX_BUTTON_SNAPSHOT:
				/* Emulate the keypress */
				input_report_key(dev->sbutton_input_dev,
						 EM28XX_SNAPSHOT_KEY, 1);
				/* Unpress the key */
				input_report_key(dev->sbutton_input_dev,
						 EM28XX_SNAPSHOT_KEY, 0);
				break;
548 549 550 551 552 553 554 555 556
			case EM28XX_BUTTON_ILLUMINATION:
				led = em28xx_find_led(dev,
						      EM28XX_LED_ILLUMINATION);
				/* Switch illumination LED on/off */
				if (led)
					em28xx_toggle_reg_bits(dev,
							       led->gpio_reg,
							       led->gpio_mask);
				break;
557 558 559 560 561 562
			default:
				WARN_ONCE(1, "BUG: unhandled button role.");
			}
			/* Next button */
			j++;
		}
563 564
		/* Save current value for comparison during the next polling */
		dev->button_polling_last_values[i] = regval;
565 566
	}
	/* Schedule next poll */
567
	schedule_delayed_work(&dev->buttons_query_work,
568
			      msecs_to_jiffies(dev->button_polling_interval));
569 570
}

571
static int em28xx_register_snapshot_button(struct em28xx *dev)
572 573 574 575 576 577
{
	struct input_dev *input_dev;
	int err;

	em28xx_info("Registering snapshot button...\n");
	input_dev = input_allocate_device();
578
	if (!input_dev)
579
		return -ENOMEM;
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601

	usb_make_path(dev->udev, dev->snapshot_button_path,
		      sizeof(dev->snapshot_button_path));
	strlcat(dev->snapshot_button_path, "/sbutton",
		sizeof(dev->snapshot_button_path));

	input_dev->name = "em28xx snapshot button";
	input_dev->phys = dev->snapshot_button_path;
	input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
	set_bit(EM28XX_SNAPSHOT_KEY, input_dev->keybit);
	input_dev->keycodesize = 0;
	input_dev->keycodemax = 0;
	input_dev->id.bustype = BUS_USB;
	input_dev->id.vendor = le16_to_cpu(dev->udev->descriptor.idVendor);
	input_dev->id.product = le16_to_cpu(dev->udev->descriptor.idProduct);
	input_dev->id.version = 1;
	input_dev->dev.parent = &dev->udev->dev;

	err = input_register_device(input_dev);
	if (err) {
		em28xx_errdev("input_register_device failed\n");
		input_free_device(input_dev);
602
		return err;
603 604 605
	}

	dev->sbutton_input_dev = input_dev;
606 607
	return 0;
}
608

609 610 611
static void em28xx_init_buttons(struct em28xx *dev)
{
	u8  i = 0, j = 0;
612
	bool addr_new = false;
613

614
	dev->button_polling_interval = EM28XX_BUTTONS_DEBOUNCED_QUERY_INTERVAL;
615 616 617 618
	while (dev->board.buttons[i].role >= 0 &&
			 dev->board.buttons[i].role < EM28XX_NUM_BUTTON_ROLES) {
		struct em28xx_button *button = &dev->board.buttons[i];
		/* Check if polling address is already on the list */
619
		addr_new = true;
620 621
		for (j = 0; j < dev->num_button_polling_addresses; j++) {
			if (button->reg_r == dev->button_polling_addresses[j]) {
622
				addr_new = false;
623 624 625 626 627 628 629
				break;
			}
		}
		/* Check if max. number of polling addresses is exceeded */
		if (addr_new && dev->num_button_polling_addresses
					   >= EM28XX_NUM_BUTTON_ADDRESSES_MAX) {
			WARN_ONCE(1, "BUG: maximum number of button polling addresses exceeded.");
630
			goto next_button;
631
		}
632
		/* Button role specific checks and actions */
633
		if (button->role == EM28XX_BUTTON_SNAPSHOT) {
634
			/* Register input device */
635
			if (em28xx_register_snapshot_button(dev) < 0)
636
				goto next_button;
637 638 639 640
		} else if (button->role == EM28XX_BUTTON_ILLUMINATION) {
			/* Check sanity */
			if (!em28xx_find_led(dev, EM28XX_LED_ILLUMINATION)) {
				em28xx_errdev("BUG: illumination button defined, but no illumination LED.\n");
641
				goto next_button;
642
			}
643 644 645 646 647 648 649
		}
		/* Add read address to list of polling addresses */
		if (addr_new) {
			unsigned int index = dev->num_button_polling_addresses;
			dev->button_polling_addresses[index] = button->reg_r;
			dev->num_button_polling_addresses++;
		}
650 651 652 653 654
		/* Reduce polling interval if necessary */
		if (!button->reg_clearing)
			dev->button_polling_interval =
					 EM28XX_BUTTONS_VOLATILE_QUERY_INTERVAL;
next_button:
655 656 657 658 659 660
		/* Next button */
		i++;
	}

	/* Start polling */
	if (dev->num_button_polling_addresses) {
661 662
		memset(dev->button_polling_last_values, 0,
					       EM28XX_NUM_BUTTON_ADDRESSES_MAX);
663 664 665
		INIT_DELAYED_WORK(&dev->buttons_query_work,
							  em28xx_query_buttons);
		schedule_delayed_work(&dev->buttons_query_work,
666
			       msecs_to_jiffies(dev->button_polling_interval));
667
	}
668 669
}

670
static void em28xx_shutdown_buttons(struct em28xx *dev)
671
{
672 673 674 675 676
	/* Cancel polling */
	cancel_delayed_work_sync(&dev->buttons_query_work);
	/* Clear polling addresses list */
	dev->num_button_polling_addresses = 0;
	/* Deregister input devices */
677 678 679 680 681 682 683
	if (dev->sbutton_input_dev != NULL) {
		em28xx_info("Deregistering snapshot button\n");
		input_unregister_device(dev->sbutton_input_dev);
		dev->sbutton_input_dev = NULL;
	}
}

684
static int em28xx_ir_init(struct em28xx *dev)
685 686
{
	struct em28xx_IR *ir;
687
	struct rc_dev *rc;
688
	int err = -ENOMEM;
689
	u64 rc_type;
690
	u16 i2c_rc_dev_addr = 0;
691

692 693 694 695 696
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

697 698
	kref_get(&dev->ref);

699 700
	if (dev->board.buttons)
		em28xx_init_buttons(dev);
701 702

	if (dev->board.has_ir_i2c) {
703 704
		i2c_rc_dev_addr = em28xx_probe_i2c_ir(dev);
		if (!i2c_rc_dev_addr) {
705 706 707 708
			dev->board.has_ir_i2c = 0;
			em28xx_warn("No i2c IR remote control device found.\n");
			return -ENODEV;
		}
709 710
	}

711
	if (dev->board.ir_codes == NULL && !dev->board.has_ir_i2c) {
712
		/* No remote control support */
713 714
		em28xx_warn("Remote control support is not available for "
				"this card.\n");
715
		return 0;
716 717
	}

718 719
	em28xx_info("Registering input extension\n");

720
	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
721 722
	rc = rc_allocate_device();
	if (!ir || !rc)
723
		goto error;
724 725 726 727

	/* record handles to ourself */
	ir->dev = dev;
	dev->ir = ir;
728
	ir->rc = rc;
729

730 731 732
	rc->priv = ir;
	rc->open = em28xx_ir_start;
	rc->close = em28xx_ir_stop;
733

734 735 736 737 738 739 740 741 742 743 744 745 746 747
	if (dev->board.has_ir_i2c) {	/* external i2c device */
		switch (dev->model) {
		case EM2800_BOARD_TERRATEC_CINERGY_200:
		case EM2820_BOARD_TERRATEC_CINERGY_250:
			rc->map_name = RC_MAP_EM_TERRATEC;
			ir->get_key_i2c = em28xx_get_key_terratec;
			break;
		case EM2820_BOARD_PINNACLE_USB_2:
			rc->map_name = RC_MAP_PINNACLE_GREY;
			ir->get_key_i2c = em28xx_get_key_pinnacle_usb_grey;
			break;
		case EM2820_BOARD_HAUPPAUGE_WINTV_USB_2:
			rc->map_name = RC_MAP_HAUPPAUGE;
			ir->get_key_i2c = em28xx_get_key_em_haup;
748
			rc->allowed_protocols = RC_BIT_RC5;
749 750 751 752 753 754 755 756 757 758
			break;
		case EM2820_BOARD_LEADTEK_WINFAST_USBII_DELUXE:
			rc->map_name = RC_MAP_WINFAST_USBII_DELUXE;
			ir->get_key_i2c = em28xx_get_key_winfast_usbii_deluxe;
			break;
		default:
			err = -ENODEV;
			goto error;
		}

759
		ir->i2c_dev_addr = i2c_rc_dev_addr;
760 761 762 763
	} else {	/* internal device */
		switch (dev->chip_id) {
		case CHIP_ID_EM2860:
		case CHIP_ID_EM2883:
764
			rc->allowed_protocols = RC_BIT_RC5 | RC_BIT_NEC;
765 766 767 768 769
			ir->get_key = default_polling_getkey;
			break;
		case CHIP_ID_EM2884:
		case CHIP_ID_EM2874:
		case CHIP_ID_EM28174:
770
		case CHIP_ID_EM28178:
771
			ir->get_key = em2874_polling_getkey;
772 773
			rc->allowed_protocols = RC_BIT_RC5 | RC_BIT_NEC |
					     RC_BIT_RC6_0;
774 775 776 777 778 779 780 781 782 783 784 785 786 787
			break;
		default:
			err = -ENODEV;
			goto error;
		}

		rc->change_protocol = em28xx_ir_change_protocol;
		rc->map_name = dev->board.ir_codes;

		/* By default, keep protocol field untouched */
		rc_type = RC_BIT_UNKNOWN;
		err = em28xx_ir_change_protocol(rc, &rc_type);
		if (err)
			goto error;
788 789
	}

790 791 792
	/* This is how often we ask the chip for IR information */
	ir->polling = 100; /* ms */

793
	/* init input device */
794
	snprintf(ir->name, sizeof(ir->name), "em28xx IR (%s)", dev->name);
795 796 797 798

	usb_make_path(dev->udev, ir->phys, sizeof(ir->phys));
	strlcat(ir->phys, "/input0", sizeof(ir->phys));

799 800 801 802 803 804 805 806
	rc->input_name = ir->name;
	rc->input_phys = ir->phys;
	rc->input_id.bustype = BUS_USB;
	rc->input_id.version = 1;
	rc->input_id.vendor = le16_to_cpu(dev->udev->descriptor.idVendor);
	rc->input_id.product = le16_to_cpu(dev->udev->descriptor.idProduct);
	rc->dev.parent = &dev->udev->dev;
	rc->driver_name = MODULE_NAME;
807 808

	/* all done */
809
	err = rc_register_device(rc);
810
	if (err)
811
		goto error;
812

813 814
	em28xx_info("Input extension successfully initalized\n");

815
	return 0;
816

817
error:
818
	dev->ir = NULL;
819
	rc_free_device(rc);
820 821 822 823
	kfree(ir);
	return err;
}

824
static int em28xx_ir_fini(struct em28xx *dev)
825 826 827
{
	struct em28xx_IR *ir = dev->ir;

828 829 830 831 832
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

833 834
	em28xx_info("Closing input extension");

835
	em28xx_shutdown_buttons(dev);
836

837 838
	/* skip detach on non attached boards */
	if (!ir)
839
		goto ref_put;
840

841 842
	if (ir->rc)
		rc_unregister_device(ir->rc);
843 844

	/* done */
845
	kfree(ir);
846
	dev->ir = NULL;
847 848 849 850

ref_put:
	kref_put(&dev->ref, em28xx_free_device);

851 852 853
	return 0;
}

854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888
static int em28xx_ir_suspend(struct em28xx *dev)
{
	struct em28xx_IR *ir = dev->ir;

	if (dev->is_audio_only)
		return 0;

	em28xx_info("Suspending input extension");
	if (ir)
		cancel_delayed_work_sync(&ir->work);
	cancel_delayed_work_sync(&dev->buttons_query_work);
	/* is canceling delayed work sufficient or does the rc event
	   kthread needs stopping? kthread is stopped in
	   ir_raw_event_unregister() */
	return 0;
}

static int em28xx_ir_resume(struct em28xx *dev)
{
	struct em28xx_IR *ir = dev->ir;

	if (dev->is_audio_only)
		return 0;

	em28xx_info("Resuming input extension");
	/* if suspend calls ir_raw_event_unregister(), the should call
	   ir_raw_event_register() */
	if (ir)
		schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling));
	if (dev->num_button_polling_addresses)
		schedule_delayed_work(&dev->buttons_query_work,
			       msecs_to_jiffies(dev->button_polling_interval));
	return 0;
}

889 890 891 892 893
static struct em28xx_ops rc_ops = {
	.id   = EM28XX_RC,
	.name = "Em28xx Input Extension",
	.init = em28xx_ir_init,
	.fini = em28xx_ir_fini,
894 895
	.suspend = em28xx_ir_suspend,
	.resume = em28xx_ir_resume,
896 897 898 899 900 901 902 903 904 905 906 907 908
};

static int __init em28xx_rc_register(void)
{
	return em28xx_register_extension(&rc_ops);
}

static void __exit em28xx_rc_unregister(void)
{
	em28xx_unregister_extension(&rc_ops);
}

MODULE_LICENSE("GPL");
909
MODULE_AUTHOR("Mauro Carvalho Chehab");
910 911
MODULE_DESCRIPTION(DRIVER_DESC " - input interface");
MODULE_VERSION(EM28XX_VERSION);
912 913 914

module_init(em28xx_rc_register);
module_exit(em28xx_rc_unregister);