From: timf <timf@iinet.net.au>
To: Allen <lists@iisys.com.au>,
linux-dvb@linuxtv.org, video4linux-list@redhat.com,
hermann pitton <hermann-pitton@arcor.de>
Subject: Re: [linux-dvb] Kworld DVB-T 210 - dvb tuning problem
Date: Wed, 18 Jun 2008 10:51:05 +0800 [thread overview]
Message-ID: <48587819.6040404@iinet.net.au> (raw)
In-Reply-To: <48586F09.7020700@iinet.net.au>
timf wrote:
> Allen wrote:
>
>> Tim,
>>
>> I was just sorting through some old emails from linuxtv archive, and
>> came across
>>
>>
>>
>>> PS. I've actually managed to get the remote to work through a very
>>> convoluted approach via the archives (Hermann), using ir-kbd-i2c.c,
>>> saa7134-i2c.c. But it's no use unless we can fix this tuning/scanning
>>> issue.
>>>
>>>
>> I have a kw 220rf which I think might be very similar.
>>
>> Despite repeated attempts to get the remote working, I have never been
>> able to get it to respond in any fashion. Could you please describe how
>> you got it to function, and any problems with operation.
>>
>> Thanks,
>>
>> Allen
>>
>>
>>
> Hi Steve,
>
Woops! Profuse apologies, I of course meant Hi Allen,
(too many email replies is my only excuse)
> Please cc to these mail lists so others can be helpful to you, as well.
> You will find Hermann has some answers for saa7134 i2c remotes.
> I will paste here my mods, so that others may be able to help get it
> going.
>
> This code is an adaptation of originally Henry Wong's work,
> and much further work by numerous people across the planet.
> Until recently this modification enabled a working remote control
> for the Kworld 210RF.
> This card has a KS007 remote controller chip.
>
> Since that time, the i2c code in v4l-dvb has undergone a
> substantial transition.
>
> Thus this code no longer works, in particular, within ir-kbd-i2c.c
> This is the only success I have ever had in getting an i2c
> remote control to work in saa7134.
>
> As I have had a few problems with this card working properly,
> I basically lost interest.
>
> Perhaps others with a Kworld 210RF or a Kworld 220RF card
> can get it working again.
>
> ***************************************************************
> Mods to /v4l-dvb/linux/include/media/ir-common.h
>
> extern IR_KEYTAB_TYPE ir_codes_kworld_210[IR_KEYTAB_SIZE];
> ***************************************************************
> Mods to /v4l-dvb/linux/drivers/media/common/ir-keymaps.c
>
> IR_KEYTAB_TYPE ir_codes_kworld_210[IR_KEYTAB_SIZE] = {
> [ 0x00 ] = KEY_1,
> [ 0x01 ] = KEY_2,
> [ 0x02 ] = KEY_3,
> [ 0x03 ] = KEY_4,
> [ 0x04 ] = KEY_5,
> [ 0x05 ] = KEY_6,
> [ 0x06 ] = KEY_7,
> [ 0x07 ] = KEY_8,
> [ 0x08 ] = KEY_9,
> [ 0x09 ] = KEY_BACKSPACE,
> [ 0x0a ] = KEY_0,
> [ 0x0b ] = KEY_ENTER,
> [ 0x0c ] = KEY_POWER,
> [ 0x0d ] = KEY_SUBTITLE,
> [ 0x0e ] = KEY_VIDEO,
> [ 0x0f ] = KEY_CAMERA,
> [ 0x10 ] = KEY_CHANNELUP,
> [ 0x11 ] = KEY_CHANNELDOWN,
> [ 0x12 ] = KEY_VOLUMEDOWN,
> [ 0x13 ] = KEY_VOLUMEUP,
> [ 0x14 ] = KEY_MUTE,
> [ 0x15 ] = KEY_AUDIO,
> [ 0x16 ] = KEY_TV,
> [ 0x17 ] = KEY_ZOOM,
> [ 0x18 ] = KEY_PRINT,
> [ 0x19 ] = KEY_SETUP,
> [ 0x1a ] = KEY_STOP,
> [ 0x1b ] = KEY_RECORD,
> [ 0x1c ] = KEY_TEXT,
> [ 0x1d ] = KEY_REWIND,
> [ 0x1e ] = KEY_FASTFORWARD,
> [ 0x1f ] = KEY_SHUFFLE,
> [ 0x45 ] = KEY_STOP,
> [ 0x44 ] = KEY_PLAY,
> };
> EXPORT_SYMBOL_GPL(ir_codes_kworld_210);
> ***************************************************************
> Mods to /v4l-dvb/linux/drivers/media/video/saa7134/saa7134-i2c.c
> ...
> /* Am I an i2c remote control? */
>
> switch (client->addr) {
> case 0x7a:
> case 0x47:
> case 0x71:
> case 0x2d:
> case 0x30: /*for kw210 remote control*/
> {
> ...
>
> static char *i2c_devs[128] = {
> [ 0x20 ] = "mpeg encoder (saa6752hs)",
> [ 0xa0 >> 1 ] = "eeprom",
> [ 0xc0 >> 1 ] = "tuner (analog)",
> [ 0x86 >> 1 ] = "tda9887",
> [ 0x5a >> 1 ] = "remote control",
> [ 0x30 ] = "kw210 remote control",
> };
> ...
> ***************************************************************
> Mods to /v4l-dvb/linux/drivers/media/video/ir-kbd-i2c.c
> ...
>
> static int get_key_kworld_210(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
> {
> unsigned char b;
>
> /* poll IR chip */
> if (1 != i2c_master_recv(&ir->c,&b,1)) {
> dprintk(1,"read error\n");
> return -EIO;
> }
>
> /* it seems that 0x80 indicates that a button is still hold
> down, while 0xff indicates that no button is hold
> down. 0x80 sequences are sometimes interrupted by 0xFF */
>
> dprintk(2,"key %02x\n", b);
>
> if (b == 0xff)
> return 0;
>
> if (b == 0x80)
> /* keep old data */
> return 1;
>
> *ir_key = b;
> *ir_raw = b;
> return 1;
> }
> ...
> /*Unless the timer is modified, you have time to make a cup of tea while
> waiting
> * for a response after pressing a key
> */
> static int polling_interval = 100; /* ms */
> ...
> static void ir_timer(unsigned long data)
> {
> struct IR_i2c *ir = (struct IR_i2c*)data;
> schedule_work(&ir->work);
> }
> ...
> static void ir_work(struct work_struct *work)
> #endif
> {
> #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
> struct IR_i2c *ir = data;
> #else
> struct IR_i2c *ir = container_of(work, struct IR_i2c, work);
> #endif
>
> ir_key_poll(ir);
> /*kw210 improve key-response time*/
> mod_timer(&ir->timer, jiffies + polling_interval*HZ/1000);
> }
> ...
> /*needed to select between cards with same i2c address for remote
> controller*/
> static int kWorld_210 = 0;
> ...
> case 0x30:
> ir_type = IR_TYPE_OTHER;
> /*add kw210 card*/
> if (kWorld_210 == 1) {
> name = "kWoRlD210";
> ir->get_key = get_key_kworld_210;
> ir_codes = ir_codes_kworld_210;
> } else {
> name = "KNC One";
> ir->get_key = get_key_knc1;
> ir_codes = ir_codes_empty;
> }
> break;
> ...
> static int ir_probe(struct i2c_adapter *adap)
> {
> ...
>
> static const int probe_bttv[] = { 0x1a, 0x18, 0x4b, 0x64, 0x30, -1};
> /*add 0x30*/
> static const int probe_saa7134[] = { 0x7a, 0x47, 0x71, 0x2d, 0x30, -1 };
> ...
> c->adapter = adap;
> for (i = 0; -1 != probe[i]; i++) {
> c->addr = probe[i];
> rc = i2c_master_recv(c, &buf, 0);
> /*mod added here to "wake up" kw210 remote controller chip*/
> if (adap->id == I2C_HW_SAA7134 && probe[i] == 0x30)
> {
> struct i2c_client c2;
> memset (&c2, 0, sizeof(c2));
> c2.adapter = adap;
> for (c2.addr=127; c2.addr > 0; c2.addr--) {
> if (0 == i2c_master_recv(&c2,&buf,0)) {
> dprintk(1,"Found another device, at addr 0x%02x\n",
> c2.addr);
> break;
> }
> }
>
> /* Now do the probe. The controller does not respond
> to 0-byte reads, so we use a 1-byte read instead. */
> rc = i2c_master_recv(c,&buf,1);
> rc--;
> kWorld_210 = 1;
> } else {
> rc = i2c_master_recv(c,&buf,0);
> }
> dprintk(1,"probe 0x%02x @ %s: %s\n",
> probe[i], adap->name,
> (0 == rc) ? "yes" : "no");
> if (0 == rc) {
> ir_attach(adap, probe[i], 0, 0);
> break;
> }
> }
> kfree(c);
> return 0;
> }
> ***************************************************************
>
> Regards,
> Timf
>
> _______________________________________________
> linux-dvb mailing list
> linux-dvb@linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
>
>
--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
next prev parent reply other threads:[~2008-06-18 2:51 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1204893775.10536.4.camel@ubuntu>
[not found] ` <47D1A65B.3080900@t-online.de>
2008-03-14 7:41 ` [linux-dvb] Kworld DVB-T 210 - dvb tuning problem timf
2008-03-17 21:22 ` Hartmut Hackmann
2008-03-18 14:40 ` timf
2008-03-18 22:56 ` Hartmut Hackmann
2008-03-19 4:03 ` timf
2008-03-19 23:18 ` Hartmut Hackmann
[not found] ` <1213744559.11684.4.camel@asus.lounge>
2008-06-18 2:12 ` timf
2008-06-18 2:51 ` timf [this message]
2008-04-10 16:22 timf
2008-04-10 22:08 ` Hartmut Hackmann
2008-04-10 23:30 ` hermann pitton
2008-04-11 17:54 ` timf
2008-04-11 22:14 ` Hartmut Hackmann
2008-04-13 6:00 ` timf
2008-04-13 7:59 ` timf
2008-04-13 15:54 ` timf
2008-04-13 17:08 ` timf
2008-04-13 18:56 ` Hartmut Hackmann
2008-04-13 19:25 ` timf
2008-04-13 20:23 ` Hartmut Hackmann
2008-04-13 21:08 ` timf
2008-04-13 21:41 ` Hartmut Hackmann
2008-04-13 22:11 ` timf
2008-04-13 22:35 ` timf
2008-04-13 22:53 ` Hartmut Hackmann
2008-04-14 14:10 ` timf
2008-04-15 0:42 ` hermann pitton
2008-04-11 21:23 ` Hartmut Hackmann
2008-04-12 11:30 ` hermann pitton
2008-04-12 12:00 ` timf
-- strict thread matches above, loose matches on Subject: below --
2008-03-14 12:52 Steve Moreau
2008-03-07 12:51 timf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48587819.6040404@iinet.net.au \
--to=timf@iinet.net.au \
--cc=hermann-pitton@arcor.de \
--cc=linux-dvb@linuxtv.org \
--cc=lists@iisys.com.au \
--cc=video4linux-list@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox