V4L/DVB (8395): saa7134: Fix Kbuild dependency of ir-kbd-i2c
Currently, saa7134 is dependent of ir-kbd-i2c, since it uses a symbol that is defined there. However, as this symbol is used only on saa7134, there's no sense on keeping it defined there (or on ir-commons). So, let's move it to saa7134 and remove one symbol for being exported. Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
4db16db4f6
commit
1c22dad8ab
3 changed files with 78 additions and 85 deletions
|
@ -194,88 +194,6 @@ static int get_key_knc1(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Common (grey or coloured) pinnacle PCTV remote handling
|
||||
*
|
||||
*/
|
||||
static int get_key_pinnacle(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
int parity_offset, int marker, int code_modulo)
|
||||
{
|
||||
unsigned char b[4];
|
||||
unsigned int start = 0,parity = 0,code = 0;
|
||||
|
||||
/* poll IR chip */
|
||||
if (4 != i2c_master_recv(&ir->c,b,4)) {
|
||||
dprintk(2,"read error\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
for (start = 0; start < ARRAY_SIZE(b); start++) {
|
||||
if (b[start] == marker) {
|
||||
code=b[(start+parity_offset+1)%4];
|
||||
parity=b[(start+parity_offset)%4];
|
||||
}
|
||||
}
|
||||
|
||||
/* Empty Request */
|
||||
if (parity==0)
|
||||
return 0;
|
||||
|
||||
/* Repeating... */
|
||||
if (ir->old == parity)
|
||||
return 0;
|
||||
|
||||
ir->old = parity;
|
||||
|
||||
/* drop special codes when a key is held down a long time for the grey controller
|
||||
In this case, the second bit of the code is asserted */
|
||||
if (marker == 0xfe && (code & 0x40))
|
||||
return 0;
|
||||
|
||||
code %= code_modulo;
|
||||
|
||||
*ir_raw = code;
|
||||
*ir_key = code;
|
||||
|
||||
dprintk(1,"Pinnacle PCTV key %02x\n", code);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* The grey pinnacle PCTV remote
|
||||
*
|
||||
* There are one issue with this remote:
|
||||
* - I2c packet does not change when the same key is pressed quickly. The workaround
|
||||
* is to hold down each key for about half a second, so that another code is generated
|
||||
* in the i2c packet, and the function can distinguish key presses.
|
||||
*
|
||||
* Sylvain Pasche <sylvain.pasche@gmail.com>
|
||||
*/
|
||||
int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
|
||||
return get_key_pinnacle(ir, ir_key, ir_raw, 1, 0xfe, 0xff);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(get_key_pinnacle_grey);
|
||||
|
||||
|
||||
/* The new pinnacle PCTV remote (with the colored buttons)
|
||||
*
|
||||
* Ricardo Cerqueira <v4l@cerqueira.org>
|
||||
*/
|
||||
int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
/* code_modulo parameter (0x88) is used to reduce code value to fit inside IR_KEYTAB_SIZE
|
||||
*
|
||||
* this is the only value that results in 42 unique
|
||||
* codes < 128
|
||||
*/
|
||||
|
||||
return get_key_pinnacle(ir, ir_key, ir_raw, 2, 0x80, 0x88);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(get_key_pinnacle_color);
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static void ir_key_poll(struct IR_i2c *ir)
|
||||
|
|
|
@ -198,6 +198,84 @@ static int get_key_beholdm6xx(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Common (grey or coloured) pinnacle PCTV remote handling
|
||||
*
|
||||
*/
|
||||
static int get_key_pinnacle(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw,
|
||||
int parity_offset, int marker, int code_modulo)
|
||||
{
|
||||
unsigned char b[4];
|
||||
unsigned int start = 0,parity = 0,code = 0;
|
||||
|
||||
/* poll IR chip */
|
||||
if (4 != i2c_master_recv(&ir->c, b, 4)) {
|
||||
i2cdprintk("read error\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
for (start = 0; start < ARRAY_SIZE(b); start++) {
|
||||
if (b[start] == marker) {
|
||||
code=b[(start+parity_offset + 1) % 4];
|
||||
parity=b[(start+parity_offset) % 4];
|
||||
}
|
||||
}
|
||||
|
||||
/* Empty Request */
|
||||
if (parity == 0)
|
||||
return 0;
|
||||
|
||||
/* Repeating... */
|
||||
if (ir->old == parity)
|
||||
return 0;
|
||||
|
||||
ir->old = parity;
|
||||
|
||||
/* drop special codes when a key is held down a long time for the grey controller
|
||||
In this case, the second bit of the code is asserted */
|
||||
if (marker == 0xfe && (code & 0x40))
|
||||
return 0;
|
||||
|
||||
code %= code_modulo;
|
||||
|
||||
*ir_raw = code;
|
||||
*ir_key = code;
|
||||
|
||||
i2cdprintk("Pinnacle PCTV key %02x\n", code);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* The grey pinnacle PCTV remote
|
||||
*
|
||||
* There are one issue with this remote:
|
||||
* - I2c packet does not change when the same key is pressed quickly. The workaround
|
||||
* is to hold down each key for about half a second, so that another code is generated
|
||||
* in the i2c packet, and the function can distinguish key presses.
|
||||
*
|
||||
* Sylvain Pasche <sylvain.pasche@gmail.com>
|
||||
*/
|
||||
static int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
|
||||
return get_key_pinnacle(ir, ir_key, ir_raw, 1, 0xfe, 0xff);
|
||||
}
|
||||
|
||||
|
||||
/* The new pinnacle PCTV remote (with the colored buttons)
|
||||
*
|
||||
* Ricardo Cerqueira <v4l@cerqueira.org>
|
||||
*/
|
||||
static int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
|
||||
{
|
||||
/* code_modulo parameter (0x88) is used to reduce code value to fit inside IR_KEYTAB_SIZE
|
||||
*
|
||||
* this is the only value that results in 42 unique
|
||||
* codes < 128
|
||||
*/
|
||||
|
||||
return get_key_pinnacle(ir, ir_key, ir_raw, 2, 0x80, 0x88);
|
||||
}
|
||||
|
||||
void saa7134_input_irq(struct saa7134_dev *dev)
|
||||
{
|
||||
struct card_ir *ir = dev->remote;
|
||||
|
|
|
@ -19,7 +19,4 @@ struct IR_i2c {
|
|||
char phys[32];
|
||||
int (*get_key)(struct IR_i2c*, u32*, u32*);
|
||||
};
|
||||
|
||||
int get_key_pinnacle_grey(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw);
|
||||
int get_key_pinnacle_color(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw);
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue