linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Antti Palosaari <crope@iki.fi>
To: Matthias Schwarzott <zzam@gentoo.org>,
	linux-media@vger.kernel.org, mchehab@osg.samsung.com
Subject: Re: [PATCH 02/12] cx231xx: use own i2c_client for eeprom access
Date: Fri, 26 Sep 2014 15:31:59 +0300	[thread overview]
Message-ID: <54255CBF.9040303@iki.fi> (raw)
In-Reply-To: <5424EBD0.1020300@gentoo.org>

yes, of course :) If you has only one message, there is nothing to start 
again. Sending one message using i2c_transfer() means same than using 
i2c_master_send(), but the later one is just aimed to send single 
message and it cannot be used to send multiple messages at once.

Code is correct, but it triggered my sensors when reading it and I have 
to check it many times whats going there.

regards
Antti

On 09/26/2014 07:30 AM, Matthias Schwarzott wrote:
> Hi Antti,
>
> I think that i2c_transfer sens no repeated start when sending only one
> message per call.
>
> At least the received eeprom content looks correct.
>
> Regards
> Matthias
>
> On 25.09.2014 16:58, Antti Palosaari wrote:
>> Reviewed-by: Antti Palosaari <crope@iki.fi>
>>
>> Please add commit description (why and how).
>>
>> Some notes for further development:
>> It sends single messages, so you could (or even should) use
>> i2c_master_send/i2c_master_recv (i2c_transfer is aimed for sending
>> multiple messages using REPEATED START condition).
>>
>> I am not sure though if these eeprom chips uses REPEATED START condition
>> for reads (means it could be broken even now).
>>
>> regards
>> Antti
>>
>> On 09/25/2014 08:07 AM, Matthias Schwarzott wrote:
>>> Signed-off-by: Matthias Schwarzott <zzam@gentoo.org>
>>> ---
>>>    drivers/media/usb/cx231xx/cx231xx-cards.c | 24 +++++++++++++-----------
>>>    1 file changed, 13 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c
>>> b/drivers/media/usb/cx231xx/cx231xx-cards.c
>>> index 791f00c..092fb85 100644
>>> --- a/drivers/media/usb/cx231xx/cx231xx-cards.c
>>> +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
>>> @@ -980,23 +980,20 @@ static void cx231xx_config_tuner(struct cx231xx
>>> *dev)
>>>
>>>    }
>>>
>>> -static int read_eeprom(struct cx231xx *dev, u8 *eedata, int len)
>>> +static int read_eeprom(struct cx231xx *dev, struct i2c_client *client,
>>> +               u8 *eedata, int len)
>>>    {
>>>        int ret = 0;
>>> -    u8 addr = 0xa0 >> 1;
>>>        u8 start_offset = 0;
>>>        int len_todo = len;
>>>        u8 *eedata_cur = eedata;
>>>        int i;
>>> -    struct i2c_msg msg_write = { .addr = addr, .flags = 0,
>>> +    struct i2c_msg msg_write = { .addr = client->addr, .flags = 0,
>>>            .buf = &start_offset, .len = 1 };
>>> -    struct i2c_msg msg_read = { .addr = addr, .flags = I2C_M_RD };
>>> -
>>> -    /* mutex_lock(&dev->i2c_lock); */
>>> -    cx231xx_enable_i2c_port_3(dev, false);
>>> +    struct i2c_msg msg_read = { .addr = client->addr, .flags =
>>> I2C_M_RD };
>>>
>>>        /* start reading at offset 0 */
>>> -    ret = i2c_transfer(&dev->i2c_bus[1].i2c_adap, &msg_write, 1);
>>> +    ret = i2c_transfer(client->adapter, &msg_write, 1);
>>>        if (ret < 0) {
>>>            cx231xx_err("Can't read eeprom\n");
>>>            return ret;
>>> @@ -1006,7 +1003,7 @@ static int read_eeprom(struct cx231xx *dev, u8
>>> *eedata, int len)
>>>            msg_read.len = (len_todo > 64) ? 64 : len_todo;
>>>            msg_read.buf = eedata_cur;
>>>
>>> -        ret = i2c_transfer(&dev->i2c_bus[1].i2c_adap, &msg_read, 1);
>>> +        ret = i2c_transfer(client->adapter, &msg_read, 1);
>>>            if (ret < 0) {
>>>                cx231xx_err("Can't read eeprom\n");
>>>                return ret;
>>> @@ -1062,9 +1059,14 @@ void cx231xx_card_setup(struct cx231xx *dev)
>>>            {
>>>                struct tveeprom tvee;
>>>                static u8 eeprom[256];
>>> +            struct i2c_client client;
>>> +
>>> +            memset(&client, 0, sizeof(client));
>>> +            client.adapter = &dev->i2c_bus[1].i2c_adap;
>>> +            client.addr = 0xa0 >> 1;
>>>
>>> -            read_eeprom(dev, eeprom, sizeof(eeprom));
>>> -            tveeprom_hauppauge_analog(&dev->i2c_bus[1].i2c_client,
>>> +            read_eeprom(dev, &client, eeprom, sizeof(eeprom));
>>> +            tveeprom_hauppauge_analog(&client,
>>>                            &tvee, eeprom + 0xc0);
>>>                break;
>>>            }
>>>
>>
>

-- 
http://palosaari.fi/

  reply	other threads:[~2014-09-26 12:32 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-25  5:07 [PATCH 01/12] cx231xx: let i2c bus scanning use its own i2c_client Matthias Schwarzott
2014-09-25  5:07 ` [PATCH 02/12] cx231xx: use own i2c_client for eeprom access Matthias Schwarzott
2014-09-25 14:58   ` Antti Palosaari
2014-09-26  4:30     ` Matthias Schwarzott
2014-09-26 12:31       ` Antti Palosaari [this message]
2014-09-26 13:00         ` Antti Palosaari
2014-09-25  5:07 ` [PATCH 03/12] cx231xx: delete i2c_client per bus Matthias Schwarzott
2014-09-25 15:00   ` Antti Palosaari
2014-09-25  5:07 ` [PATCH 04/12] cx231xx: give each master i2c bus a seperate name Matthias Schwarzott
2014-09-25 15:04   ` Antti Palosaari
2014-09-26  4:34     ` Matthias Schwarzott
2014-09-26 12:32       ` Antti Palosaari
2014-09-25  5:07 ` [PATCH 05/12] cx231xx: Use symbolic constants for i2c ports Matthias Schwarzott
2014-09-25 15:06   ` Antti Palosaari
2014-09-25  5:07 ` [PATCH 06/12] cx231xx: add wrapper to get the i2c_adapter pointer Matthias Schwarzott
2014-09-25 15:13   ` Antti Palosaari
2014-09-25  5:07 ` [PATCH 07/12] cx231xx: remember status of port_3 switch Matthias Schwarzott
2014-09-25  5:08 ` [PATCH 08/12] cx231xx: let is_tuner check the real i2c port and not the i2c master number Matthias Schwarzott
2014-09-25  5:08 ` [PATCH 09/12] cx231xx: change usage of I2C_1 to the real i2c port Matthias Schwarzott
2014-09-25  5:08 ` [PATCH 10/12] cx231xx: register i2c mux adapters for master1 and use as I2C_1 and I2C_3 Matthias Schwarzott
2014-09-25 15:25   ` Antti Palosaari
2014-09-25  5:08 ` [PATCH 11/12] cx231xx: drop unconditional port3 switching Matthias Schwarzott
2014-09-25 15:26   ` Antti Palosaari
2014-09-25  5:08 ` [PATCH 12/12] cx231xx: scan all four existing i2c busses instead of the 3 masters Matthias Schwarzott
2014-09-25 15:30   ` Antti Palosaari
2014-09-25 14:50 ` [PATCH 01/12] cx231xx: let i2c bus scanning use its own i2c_client Antti Palosaari

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=54255CBF.9040303@iki.fi \
    --to=crope@iki.fi \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@osg.samsung.com \
    --cc=zzam@gentoo.org \
    /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;
as well as URLs for NNTP newsgroup(s).