em28xx-input.c 23.3 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
	if (dev->board.buttons)
		em28xx_init_buttons(dev);
681 682

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

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

698 699
	em28xx_info("Registering input extension\n");

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

	/* record handles to ourself */
	ir->dev = dev;
	dev->ir = ir;
708
	ir->rc = rc;
709

710 711 712
	rc->priv = ir;
	rc->open = em28xx_ir_start;
	rc->close = em28xx_ir_stop;
713

714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738
	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;
			rc->allowed_protos = RC_BIT_RC5;
			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;
		}

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

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

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

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

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

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

793 794
	em28xx_info("Input extension successfully initalized\n");

795
	return 0;
796

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

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

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

813 814
	em28xx_info("Closing input extension");

815
	em28xx_shutdown_buttons(dev);
816

817 818 819 820
	/* skip detach on non attached boards */
	if (!ir)
		return 0;

821 822
	if (ir->rc)
		rc_unregister_device(ir->rc);
823 824

	/* done */
825
	kfree(ir);
826 827 828 829
	dev->ir = NULL;
	return 0;
}

830 831 832 833 834 835 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
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;
}

865 866 867 868 869
static struct em28xx_ops rc_ops = {
	.id   = EM28XX_RC,
	.name = "Em28xx Input Extension",
	.init = em28xx_ir_init,
	.fini = em28xx_ir_fini,
870 871
	.suspend = em28xx_ir_suspend,
	.resume = em28xx_ir_resume,
872 873 874 875 876 877 878 879 880 881 882 883 884
};

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");
885
MODULE_AUTHOR("Mauro Carvalho Chehab");
886 887
MODULE_DESCRIPTION(DRIVER_DESC " - input interface");
MODULE_VERSION(EM28XX_VERSION);
888 889 890

module_init(em28xx_rc_register);
module_exit(em28xx_rc_unregister);