diff options
Diffstat (limited to 'drivers/media/video/hdpvr/hdpvr-i2c.c')
-rw-r--r-- | drivers/media/video/hdpvr/hdpvr-i2c.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/drivers/media/video/hdpvr/hdpvr-i2c.c b/drivers/media/video/hdpvr/hdpvr-i2c.c index 409de11096d4..24966aa02a70 100644 --- a/drivers/media/video/hdpvr/hdpvr-i2c.c +++ b/drivers/media/video/hdpvr/hdpvr-i2c.c | |||
@@ -4,6 +4,9 @@ | |||
4 | * | 4 | * |
5 | * Copyright (C) 2008 Janne Grunau (j@jannau.net) | 5 | * Copyright (C) 2008 Janne Grunau (j@jannau.net) |
6 | * | 6 | * |
7 | * IR device registration code is | ||
8 | * Copyright (C) 2010 Andy Walls <awalls@md.metrocast.net> | ||
9 | * | ||
7 | * This program is free software; you can redistribute it and/or | 10 | * This program is free software; you can redistribute it and/or |
8 | * modify it under the terms of the GNU General Public License as | 11 | * modify it under the terms of the GNU General Public License as |
9 | * published by the Free Software Foundation, version 2. | 12 | * published by the Free Software Foundation, version 2. |
@@ -22,6 +25,56 @@ | |||
22 | #define REQTYPE_I2C_WRITE 0xb0 | 25 | #define REQTYPE_I2C_WRITE 0xb0 |
23 | #define REQTYPE_I2C_WRITE_STATT 0xd0 | 26 | #define REQTYPE_I2C_WRITE_STATT 0xd0 |
24 | 27 | ||
28 | #define Z8F0811_IR_TX_I2C_ADDR 0x70 | ||
29 | #define Z8F0811_IR_RX_I2C_ADDR 0x71 | ||
30 | |||
31 | static const u8 ir_i2c_addrs[] = { | ||
32 | Z8F0811_IR_TX_I2C_ADDR, | ||
33 | Z8F0811_IR_RX_I2C_ADDR, | ||
34 | }; | ||
35 | |||
36 | static const char * const ir_devicenames[] = { | ||
37 | "ir_tx_z8f0811_hdpvr", | ||
38 | "ir_rx_z8f0811_hdpvr", | ||
39 | }; | ||
40 | |||
41 | static int hdpvr_new_i2c_ir(struct hdpvr_device *dev, struct i2c_adapter *adap, | ||
42 | const char *type, u8 addr) | ||
43 | { | ||
44 | struct i2c_board_info info; | ||
45 | struct IR_i2c_init_data *init_data = &dev->ir_i2c_init_data; | ||
46 | unsigned short addr_list[2] = { addr, I2C_CLIENT_END }; | ||
47 | |||
48 | memset(&info, 0, sizeof(struct i2c_board_info)); | ||
49 | strlcpy(info.type, type, I2C_NAME_SIZE); | ||
50 | |||
51 | /* Our default information for ir-kbd-i2c.c to use */ | ||
52 | switch (addr) { | ||
53 | case Z8F0811_IR_RX_I2C_ADDR: | ||
54 | init_data->ir_codes = RC_MAP_HAUPPAUGE_NEW; | ||
55 | init_data->internal_get_key_func = IR_KBD_GET_KEY_HAUP_XVR; | ||
56 | init_data->type = RC_TYPE_RC5; | ||
57 | init_data->name = "HD PVR"; | ||
58 | info.platform_data = init_data; | ||
59 | break; | ||
60 | } | ||
61 | |||
62 | return i2c_new_probed_device(adap, &info, addr_list, NULL) == NULL ? | ||
63 | -1 : 0; | ||
64 | } | ||
65 | |||
66 | int hdpvr_register_i2c_ir(struct hdpvr_device *dev) | ||
67 | { | ||
68 | int i; | ||
69 | int ret = 0; | ||
70 | |||
71 | for (i = 0; i < ARRAY_SIZE(ir_i2c_addrs); i++) | ||
72 | ret += hdpvr_new_i2c_ir(dev, dev->i2c_adapter, | ||
73 | ir_devicenames[i], ir_i2c_addrs[i]); | ||
74 | |||
75 | return ret; | ||
76 | } | ||
77 | |||
25 | static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr, | 78 | static int hdpvr_i2c_read(struct hdpvr_device *dev, unsigned char addr, |
26 | char *data, int len) | 79 | char *data, int len) |
27 | { | 80 | { |