linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Problem with a hih6130 sensor in a OMAP I2C bus
@ 2013-12-09 11:42 José Miguel Gonçalves
       [not found] ` <52A5AC95.3050803-ojS98SfuVkU@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: José Miguel Gonçalves @ 2013-12-09 11:42 UTC (permalink / raw)
  To: linux-omap, linux-i2c, Tony Lindgren, Wolfram Sang, Jean Delvare,
	Guenter Roeck, lm-sensors

Hi,

While testing an HIH6130 humidity and temperature sensor with I2C 
interface in a BeagleBone board I've found that I was unable to read it 
because the driver always returned EINVAL. With some debugging I've 
found that the error was due to a test on omap_i2c_xfer_msg() in OMAP 
I2C driver that invalidates zero length writes. The hwmon hih6130 driver 
issues such kind of request in hih6130_update_measurements() to issue a 
measurement request to the sensor.

I was able to get measurements from the sensor by hacking the hih6130 
driver replacing the following line in hih6130_update_measurements();

         ret = i2c_master_send(client, tmp, 0);

by

         tmp[0] = 0;
         ret = i2c_master_send(client, tmp, 1);

Is this the correct way to fix this issue, or should the fix be in the 
I2C OMAP driver to accept zero length transfers?

Best regards,
José Gonçalves

_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Problem with a hih6130 sensor in a OMAP I2C bus
       [not found] ` <52A5AC95.3050803-ojS98SfuVkU@public.gmane.org>
@ 2013-12-09 12:22   ` Jean Delvare
       [not found]     ` <20131209132239.3c0f6402-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Jean Delvare @ 2013-12-09 12:22 UTC (permalink / raw)
  To: José Miguel Gonçalves
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA, Tony Lindgren, Wolfram Sang,
	Guenter Roeck, lm-sensors-GZX6beZjE8VD60Wz+7aTrA

Hi José,

On Mon, 09 Dec 2013 11:42:13 +0000, José Miguel Gonçalves wrote:
> While testing an HIH6130 humidity and temperature sensor with I2C 
> interface in a BeagleBone board I've found that I was unable to read it 
> because the driver always returned EINVAL. With some debugging I've 
> found that the error was due to a test on omap_i2c_xfer_msg() in OMAP 
> I2C driver that invalidates zero length writes. The hwmon hih6130 driver 
> issues such kind of request in hih6130_update_measurements() to issue a 
> measurement request to the sensor.
> 
> I was able to get measurements from the sensor by hacking the hih6130 
> driver replacing the following line in hih6130_update_measurements();
> 
>          ret = i2c_master_send(client, tmp, 0);
> 
> by
> 
>          tmp[0] = 0;
>          ret = i2c_master_send(client, tmp, 1);
> 
> Is this the correct way to fix this issue, or should the fix be in the 
> I2C OMAP driver to accept zero length transfers?

Ideally it should be fixed in the i2c-omap bus driver. However, if
zero-length transfers are explicitly prohibited, it may mean that the
hardware itself can't do it (in which case adding a comment saying so
in the source code would be great.) You'll have to check. The driver
supports several generations of OMAP chipsets so you'll have to check
them all, maybe some can handle zero-length messages and some do not.

If fixing it in the i2c-omap driver is not possible, then working
around it in the hih6130 driver would be acceptable. You'll have to
make sure there is no side effect to sending a single byte to the chip.
If performance is a concern, you may have to enable the workaround only
when zero-byte messages aren't supported. You can check with:

i2c_get_functionality(i2c_adapter) & I2C_FUNC_SMBUS_QUICK

-- 
Jean Delvare

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Problem with a hih6130 sensor in a OMAP I2C bus
       [not found]     ` <20131209132239.3c0f6402-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
@ 2013-12-09 13:19       ` José Miguel Gonçalves
  0 siblings, 0 replies; 3+ messages in thread
From: José Miguel Gonçalves @ 2013-12-09 13:19 UTC (permalink / raw)
  To: Jean Delvare
  Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA, Tony Lindgren, Wolfram Sang,
	Guenter Roeck, lm-sensors-GZX6beZjE8VD60Wz+7aTrA

Hi Jean,

On 09-12-2013 12:22, Jean Delvare wrote:
> Hi José,
>
> On Mon, 09 Dec 2013 11:42:13 +0000, José Miguel Gonçalves wrote:
>> While testing an HIH6130 humidity and temperature sensor with I2C
>> interface in a BeagleBone board I've found that I was unable to read it
>> because the driver always returned EINVAL. With some debugging I've
>> found that the error was due to a test on omap_i2c_xfer_msg() in OMAP
>> I2C driver that invalidates zero length writes. The hwmon hih6130 driver
>> issues such kind of request in hih6130_update_measurements() to issue a
>> measurement request to the sensor.
>>
>> I was able to get measurements from the sensor by hacking the hih6130
>> driver replacing the following line in hih6130_update_measurements();
>>
>>           ret = i2c_master_send(client, tmp, 0);
>>
>> by
>>
>>           tmp[0] = 0;
>>           ret = i2c_master_send(client, tmp, 1);
>>
>> Is this the correct way to fix this issue, or should the fix be in the
>> I2C OMAP driver to accept zero length transfers?
> Ideally it should be fixed in the i2c-omap bus driver. However, if
> zero-length transfers are explicitly prohibited, it may mean that the
> hardware itself can't do it (in which case adding a comment saying so
> in the source code would be great.) You'll have to check. The driver
> supports several generations of OMAP chipsets so you'll have to check
> them all, maybe some can handle zero-length messages and some do not.
>
> If fixing it in the i2c-omap driver is not possible, then working
> around it in the hih6130 driver would be acceptable. You'll have to
> make sure there is no side effect to sending a single byte to the chip.
> If performance is a concern, you may have to enable the workaround only
> when zero-byte messages aren't supported. You can check with:
>
> i2c_get_functionality(i2c_adapter) & I2C_FUNC_SMBUS_QUICK
>

I am by no means an expert on OMAP platforms and/or I2C drivers so, if 
anyone else with more knowledge of them has a better suggestion, I will 
follow your suggestion and submit my workaround patch for the hih6130 
driver with the added check for support of zero-byte messages by the 
underlying I2C driver. From my understanding of the technical note for 
I2C communication on this chip;

http://www.mouser.com/pdfdocs/I2CCommunications.pdf

I see no problems on writing that dummy byte to it and my tests on a 
real hardware also show that.

Best regards,
José Gonçalves

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-12-09 13:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-09 11:42 Problem with a hih6130 sensor in a OMAP I2C bus José Miguel Gonçalves
     [not found] ` <52A5AC95.3050803-ojS98SfuVkU@public.gmane.org>
2013-12-09 12:22   ` Jean Delvare
     [not found]     ` <20131209132239.3c0f6402-R0o5gVi9kd7kN2dkZ6Wm7A@public.gmane.org>
2013-12-09 13:19       ` José Miguel Gonçalves

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).