em28xx-input.c 23.4 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

31
#include "em28xx.h"
32

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

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

41 42
#define MODULE_NAME "em28xx"

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

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

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

	u32 scancode;
57 58
};

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

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

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

75
	int  (*get_key_i2c)(struct i2c_client *, u32 *);
76
	int  (*get_key)(struct em28xx_IR *, struct em28xx_ir_poll_result *);
77 78 79 80 81
};

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

83
static int em28xx_get_key_terratec(struct i2c_client *i2c_dev, u32 *ir_key)
84 85 86 87
{
	unsigned char b;

	/* poll IR chip */
88
	if (1 != i2c_master_recv(i2c_dev, &b, 1))
89 90 91
		return -EIO;

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

94
	if (b == 0xff)
95 96
		return 0;

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

	*ir_key = b;
	return 1;
}

105
static int em28xx_get_key_em_haup(struct i2c_client *i2c_dev, u32 *ir_key)
106 107
{
	unsigned char buf[2];
108 109
	u16 code;
	int size;
110 111

	/* poll IR chip */
112
	size = i2c_master_recv(i2c_dev, buf, sizeof(buf));
113 114

	if (size != 2)
115 116 117
		return -EIO;

	/* Does eliminate repeated parity code */
118
	if (buf[1] == 0xff)
119 120
		return 0;

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
	/*
	 * 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.
	 */
	code =
		 ((buf[0] & 0x01) ? 0x0020 : 0) | /* 		0010 0000 */
		 ((buf[0] & 0x02) ? 0x0010 : 0) | /* 		0001 0000 */
		 ((buf[0] & 0x04) ? 0x0008 : 0) | /* 		0000 1000 */
		 ((buf[0] & 0x08) ? 0x0004 : 0) | /* 		0000 0100 */
		 ((buf[0] & 0x10) ? 0x0002 : 0) | /* 		0000 0010 */
		 ((buf[0] & 0x20) ? 0x0001 : 0) | /* 		0000 0001 */
		 ((buf[1] & 0x08) ? 0x1000 : 0) | /* 0001 0000		  */
		 ((buf[1] & 0x10) ? 0x0800 : 0) | /* 0000 1000		  */
		 ((buf[1] & 0x20) ? 0x0400 : 0) | /* 0000 0100		  */
		 ((buf[1] & 0x40) ? 0x0200 : 0) | /* 0000 0010		  */
		 ((buf[1] & 0x80) ? 0x0100 : 0);  /* 0000 0001		  */

143 144 145 146 147
	/* return key */
	*ir_key = code;
	return 1;
}

148
static int em28xx_get_key_pinnacle_usb_grey(struct i2c_client *i2c_dev,
149
					    u32 *ir_key)
150 151 152 153 154
{
	unsigned char buf[3];

	/* poll IR chip */

155
	if (3 != i2c_master_recv(i2c_dev, buf, 3))
156 157
		return -EIO;

158
	if (buf[0] != 0x00)
159 160 161 162 163 164 165
		return 0;

	*ir_key = buf[2]&0x3f;

	return 1;
}

166
static int em28xx_get_key_winfast_usbii_deluxe(struct i2c_client *i2c_dev,
167
					       u32 *ir_key)
168 169 170
{
	unsigned char subaddr, keydetect, key;

171
	struct i2c_msg msg[] = { { .addr = i2c_dev->addr, .flags = 0, .buf = &subaddr, .len = 1},
172
				 { .addr = i2c_dev->addr, .flags = I2C_M_RD, .buf = &keydetect, .len = 1} };
173 174

	subaddr = 0x10;
175
	if (2 != i2c_transfer(i2c_dev->adapter, msg, 2))
176 177 178 179 180 181
		return -EIO;
	if (keydetect == 0x00)
		return 0;

	subaddr = 0x00;
	msg[1].buf = &key;
182
	if (2 != i2c_transfer(i2c_dev->adapter, msg, 2))
183
		return -EIO;
184 185 186 187 188 189 190
	if (key == 0x00)
		return 0;

	*ir_key = key;
	return 1;
}

191 192 193 194
/**********************************************************
 Poll based get keycode functions
 **********************************************************/

195 196 197
/* This is for the em2860/em2880 */
static int default_polling_getkey(struct em28xx_IR *ir,
				  struct em28xx_ir_poll_result *poll_result)
198 199 200
{
	struct em28xx *dev = ir->dev;
	int rc;
201
	u8 msg[3] = { 0, 0, 0 };
202

203 204 205
	/* Read key toggle, brand, and key code
	   on registers 0x45, 0x46 and 0x47
	 */
206
	rc = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R45_IR,
207
					  msg, sizeof(msg));
208 209 210
	if (rc < 0)
		return rc;

211 212 213 214 215 216
	/* 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);

217 218
	/* Remote Control Address/Data (Regs 0x46/0x47) */
	poll_result->scancode = msg[1] << 8 | msg[2];
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243

	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);

244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
	/*
	 * Remote Control Address (Reg 0x52)
	 * Remote Control Data (Reg 0x53-0x55)
	 */
	switch (ir->rc_type) {
	case RC_BIT_RC5:
		poll_result->scancode = msg[1] << 8 | msg[2];
		break;
	case RC_BIT_NEC:
		if ((msg[3] ^ msg[4]) != 0xff)		/* 32 bits NEC */
			poll_result->scancode = (msg[1] << 24) |
						(msg[2] << 16) |
						(msg[3] << 8)  |
						 msg[4];
		else if ((msg[1] ^ msg[2]) != 0xff)	/* 24 bits NEC */
			poll_result->scancode = (msg[1] << 16) |
						(msg[2] << 8)  |
						 msg[3];
		else					/* Normal NEC */
			poll_result->scancode = msg[1] << 8 | msg[3];
		break;
265 266 267
	case RC_BIT_RC6_0:
		poll_result->scancode = msg[1] << 8 | msg[2];
		break;
268 269 270 271 272
	default:
		poll_result->scancode = (msg[1] << 24) | (msg[2] << 16) |
					(msg[3] << 8)  | msg[4];
		break;
	}
273 274

	return 0;
275 276 277 278 279 280
}

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

281 282
static int em28xx_i2c_ir_handle_key(struct em28xx_IR *ir)
{
283
	struct em28xx *dev = ir->dev;
284
	static u32 ir_key;
285
	int rc;
286
	struct i2c_client client;
287

288
	client.adapter = &ir->dev->i2c_adap[dev->def_i2c_bus];
289 290 291
	client.addr = ir->i2c_dev_addr;

	rc = ir->get_key_i2c(&client, &ir_key);
292 293 294 295 296 297 298 299 300 301 302 303
	if (rc < 0) {
		dprintk("ir->get_key_i2c() failed: %d\n", rc);
		return rc;
	}

	if (rc) {
		dprintk("%s: keycode = 0x%04x\n", __func__, ir_key);
		rc_keydown(ir->rc, ir_key, 0);
	}
	return 0;
}

304 305
static void em28xx_ir_handle_key(struct em28xx_IR *ir)
{
306 307 308 309 310
	int result;
	struct em28xx_ir_poll_result poll_result;

	/* read the registers containing the IR status */
	result = ir->get_key(ir, &poll_result);
311
	if (unlikely(result < 0)) {
312
		dprintk("ir->get_key() failed: %d\n", result);
313
		return;
314
	}
315

316
	if (unlikely(poll_result.read_count != ir->last_readcount)) {
317
		dprintk("%s: toggle: %d, count: %d, key 0x%04x\n", __func__,
318
			poll_result.toggle_bit, poll_result.read_count,
319
			poll_result.scancode);
320
		if (ir->full_code)
321
			rc_keydown(ir->rc,
322
				   poll_result.scancode,
323 324
				   poll_result.toggle_bit);
		else
325
			rc_keydown(ir->rc,
326
				   poll_result.scancode & 0xff,
327 328
				   poll_result.toggle_bit);

329 330
		if (ir->dev->chip_id == CHIP_ID_EM2874 ||
		    ir->dev->chip_id == CHIP_ID_EM2884)
331 332 333 334 335 336 337 338 339
			/* 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;
	}
340 341 342 343
}

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

346 347 348 349
	if (ir->i2c_dev_addr) /* external i2c device */
		em28xx_i2c_ir_handle_key(ir);
	else /* internal device */
		em28xx_ir_handle_key(ir);
350
	schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling));
351 352
}

353
static int em28xx_ir_start(struct rc_dev *rc)
354
{
355
	struct em28xx_IR *ir = rc->priv;
356

357
	INIT_DELAYED_WORK(&ir->work, em28xx_ir_work);
358
	schedule_delayed_work(&ir->work, 0);
359 360

	return 0;
361 362
}

363
static void em28xx_ir_stop(struct rc_dev *rc)
364
{
365
	struct em28xx_IR *ir = rc->priv;
366

367
	cancel_delayed_work_sync(&ir->work);
368 369
}

370
static int em2860_ir_change_protocol(struct rc_dev *rc_dev, u64 *rc_type)
371
{
372
	struct em28xx_IR *ir = rc_dev->priv;
373
	struct em28xx *dev = ir->dev;
374

375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
	/* 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;
394

395 396 397 398 399 400 401 402 403 404
	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 */
405
	if (*rc_type & RC_BIT_RC5) {
406 407
		dev->board.xclk |= EM28XX_XCLK_IR_RC5_MODE;
		ir->full_code = 1;
408 409
		*rc_type = RC_BIT_RC5;
	} else if (*rc_type & RC_BIT_NEC) {
410
		dev->board.xclk &= ~EM28XX_XCLK_IR_RC5_MODE;
411
		ir_config = EM2874_IR_NEC | EM2874_IR_NEC_NO_PARITY;
412
		ir->full_code = 1;
413
		*rc_type = RC_BIT_NEC;
414 415 416 417 418 419 420 421 422 423 424 425
	} 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);
426 427
	em28xx_write_reg_bits(dev, EM28XX_R0F_XCLK, dev->board.xclk,
			      EM28XX_XCLK_IR_RC5_MODE);
428

429 430 431 432 433 434 435 436 437
	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;

438 439 440 441
	/* Setup the proper handler based on the chip */
	switch (dev->chip_id) {
	case CHIP_ID_EM2860:
	case CHIP_ID_EM2883:
442
		return em2860_ir_change_protocol(rc_dev, rc_type);
443
	case CHIP_ID_EM2884:
444
	case CHIP_ID_EM2874:
445
	case CHIP_ID_EM28174:
446
	case CHIP_ID_EM28178:
447
		return em2874_ir_change_protocol(rc_dev, rc_type);
448
	default:
449 450
		printk("Unrecognized em28xx chip id 0x%02x: IR not supported\n",
			dev->chip_id);
451
		return -EINVAL;
452 453 454
	}
}

455
static int em28xx_probe_i2c_ir(struct em28xx *dev)
456
{
457
	int i = 0;
458 459 460 461 462 463 464
	/* 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
	};

465
	while (addr_list[i] != I2C_CLIENT_END) {
466
		if (i2c_probe_func_quick_read(&dev->i2c_adap[dev->def_i2c_bus], addr_list[i]) == 1)
467
			return addr_list[i];
468
		i++;
469 470
	}

471
	return -ENODEV;
472 473
}

474
/**********************************************************
475
 Handle buttons
476 477
 **********************************************************/

478
static void em28xx_query_buttons(struct work_struct *work)
479 480
{
	struct em28xx *dev =
481 482 483
		container_of(work, struct em28xx, buttons_query_work.work);
	u8 i, j;
	int regval;
484
	bool is_pressed, was_pressed;
485
	const struct em28xx_led *led;
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502

	/* 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;
			}
503 504 505 506 507 508 509 510 511 512 513 514 515
			/* 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));
516
			/* Handle button state */
517
			if (!is_pressed || was_pressed) {
518 519 520 521 522 523 524 525 526 527 528 529
				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;
530 531 532 533 534 535 536 537 538
			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;
539 540 541 542 543 544
			default:
				WARN_ONCE(1, "BUG: unhandled button role.");
			}
			/* Next button */
			j++;
		}
545 546
		/* Save current value for comparison during the next polling */
		dev->button_polling_last_values[i] = regval;
547 548
	}
	/* Schedule next poll */
549
	schedule_delayed_work(&dev->buttons_query_work,
550
			      msecs_to_jiffies(dev->button_polling_interval));
551 552
}

553
static int em28xx_register_snapshot_button(struct em28xx *dev)
554 555 556 557 558 559
{
	struct input_dev *input_dev;
	int err;

	em28xx_info("Registering snapshot button...\n");
	input_dev = input_allocate_device();
560
	if (!input_dev)
561
		return -ENOMEM;
562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583

	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);
584
		return err;
585 586 587
	}

	dev->sbutton_input_dev = input_dev;
588 589
	return 0;
}
590

591 592 593 594 595
static void em28xx_init_buttons(struct em28xx *dev)
{
	u8  i = 0, j = 0;
	bool addr_new = 0;

596
	dev->button_polling_interval = EM28XX_BUTTONS_DEBOUNCED_QUERY_INTERVAL;
597 598 599 600 601 602 603 604 605 606 607 608 609 610 611
	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 */
		addr_new = 1;
		for (j = 0; j < dev->num_button_polling_addresses; j++) {
			if (button->reg_r == dev->button_polling_addresses[j]) {
				addr_new = 0;
				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.");
612
			goto next_button;
613
		}
614
		/* Button role specific checks and actions */
615
		if (button->role == EM28XX_BUTTON_SNAPSHOT) {
616
			/* Register input device */
617
			if (em28xx_register_snapshot_button(dev) < 0)
618
				goto next_button;
619 620 621 622
		} 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");
623
				goto next_button;
624
			}
625 626 627 628 629 630 631
		}
		/* 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++;
		}
632 633 634 635 636
		/* Reduce polling interval if necessary */
		if (!button->reg_clearing)
			dev->button_polling_interval =
					 EM28XX_BUTTONS_VOLATILE_QUERY_INTERVAL;
next_button:
637 638 639 640 641 642
		/* Next button */
		i++;
	}

	/* Start polling */
	if (dev->num_button_polling_addresses) {
643 644
		memset(dev->button_polling_last_values, 0,
					       EM28XX_NUM_BUTTON_ADDRESSES_MAX);
645 646 647
		INIT_DELAYED_WORK(&dev->buttons_query_work,
							  em28xx_query_buttons);
		schedule_delayed_work(&dev->buttons_query_work,
648
			       msecs_to_jiffies(dev->button_polling_interval));
649
	}
650 651
}

652
static void em28xx_shutdown_buttons(struct em28xx *dev)
653
{
654 655 656 657 658
	/* Cancel polling */
	cancel_delayed_work_sync(&dev->buttons_query_work);
	/* Clear polling addresses list */
	dev->num_button_polling_addresses = 0;
	/* Deregister input devices */
659 660 661 662 663 664 665
	if (dev->sbutton_input_dev != NULL) {
		em28xx_info("Deregistering snapshot button\n");
		input_unregister_device(dev->sbutton_input_dev);
		dev->sbutton_input_dev = NULL;
	}
}

666
static int em28xx_ir_init(struct em28xx *dev)
667 668
{
	struct em28xx_IR *ir;
669
	struct rc_dev *rc;
670
	int err = -ENOMEM;
671
	u64 rc_type;
672
	u16 i2c_rc_dev_addr = 0;
673

674 675 676 677 678
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

679 680
	kref_get(&dev->ref);

681 682
	if (dev->board.buttons)
		em28xx_init_buttons(dev);
683 684

	if (dev->board.has_ir_i2c) {
685 686
		i2c_rc_dev_addr = em28xx_probe_i2c_ir(dev);
		if (!i2c_rc_dev_addr) {
687 688 689 690
			dev->board.has_ir_i2c = 0;
			em28xx_warn("No i2c IR remote control device found.\n");
			return -ENODEV;
		}
691 692
	}

693
	if (dev->board.ir_codes == NULL && !dev->board.has_ir_i2c) {
694
		/* No remote control support */
695 696
		em28xx_warn("Remote control support is not available for "
				"this card.\n");
697
		return 0;
698 699
	}

700 701
	em28xx_info("Registering input extension\n");

702
	ir = kzalloc(sizeof(*ir), GFP_KERNEL);
703 704
	rc = rc_allocate_device();
	if (!ir || !rc)
705
		goto error;
706 707 708 709

	/* record handles to ourself */
	ir->dev = dev;
	dev->ir = ir;
710
	ir->rc = rc;
711

712 713 714
	rc->priv = ir;
	rc->open = em28xx_ir_start;
	rc->close = em28xx_ir_stop;
715

716 717 718 719 720 721 722 723 724 725 726 727 728 729
	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;
730
			rc_set_allowed_protocols(rc, RC_BIT_RC5);
731 732 733 734 735 736 737 738 739 740
			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;
		}

741
		ir->i2c_dev_addr = i2c_rc_dev_addr;
742 743 744 745
	} else {	/* internal device */
		switch (dev->chip_id) {
		case CHIP_ID_EM2860:
		case CHIP_ID_EM2883:
746
			rc_set_allowed_protocols(rc, RC_BIT_RC5 | RC_BIT_NEC);
747 748 749 750 751
			ir->get_key = default_polling_getkey;
			break;
		case CHIP_ID_EM2884:
		case CHIP_ID_EM2874:
		case CHIP_ID_EM28174:
752
		case CHIP_ID_EM28178:
753
			ir->get_key = em2874_polling_getkey;
754 755
			rc_set_allowed_protocols(rc, RC_BIT_RC5 | RC_BIT_NEC |
						 RC_BIT_RC6_0);
756 757 758 759 760 761 762 763 764 765 766 767 768 769
			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;
770 771
	}

772 773 774
	/* This is how often we ask the chip for IR information */
	ir->polling = 100; /* ms */

775
	/* init input device */
776
	snprintf(ir->name, sizeof(ir->name), "em28xx IR (%s)", dev->name);
777 778 779 780

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

781 782 783 784 785 786 787 788
	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;
789 790

	/* all done */
791
	err = rc_register_device(rc);
792
	if (err)
793
		goto error;
794

795 796
	em28xx_info("Input extension successfully initalized\n");

797
	return 0;
798

799
error:
800
	dev->ir = NULL;
801
	rc_free_device(rc);
802 803 804 805
	kfree(ir);
	return err;
}

806
static int em28xx_ir_fini(struct em28xx *dev)
807 808 809
{
	struct em28xx_IR *ir = dev->ir;

810 811 812 813 814
	if (dev->is_audio_only) {
		/* Shouldn't initialize IR for this interface */
		return 0;
	}

815 816
	em28xx_info("Closing input extension");

817
	em28xx_shutdown_buttons(dev);
818

819 820
	/* skip detach on non attached boards */
	if (!ir)
821
		goto ref_put;
822

823 824
	if (ir->rc)
		rc_unregister_device(ir->rc);
825 826

	/* done */
827
	kfree(ir);
828
	dev->ir = NULL;
829 830 831 832

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

833 834 835
	return 0;
}

836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870
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;
}

871 872 873 874 875
static struct em28xx_ops rc_ops = {
	.id   = EM28XX_RC,
	.name = "Em28xx Input Extension",
	.init = em28xx_ir_init,
	.fini = em28xx_ir_fini,
876 877
	.suspend = em28xx_ir_suspend,
	.resume = em28xx_ir_resume,
878 879 880 881 882 883 884 885 886 887 888 889 890
};

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");
891
MODULE_AUTHOR("Mauro Carvalho Chehab");
892 893
MODULE_DESCRIPTION(DRIVER_DESC " - input interface");
MODULE_VERSION(EM28XX_VERSION);
894 895 896

module_init(em28xx_rc_register);
module_exit(em28xx_rc_unregister);