Hello Sebastian, Thank you for the suggestion. The API compatible with Linux devices sounds great. However, the RTEMS version we are using is a few days before your patches, and probably I will port a bt firther along the road.
I have one question, though, is there a plan to port other Linux driver APIs like SPI ? Thank you, Alex H On Thu, Apr 2, 2015 at 9:53 AM, Sebastian Huber < sebastian.hu...@embedded-brains.de> wrote: > Hello Alexandru-Sever, > > in case you use the latest RTEMS version, then I would consider to use the > new I2C support: > > https://docs.rtems.org/doxygen/cpukit/html/group__I2C.html > > For example see: > > https://git.rtems.org/rtems/tree/cpukit/dev/i2c > > https://git.rtems.org/rtems/tree/testsuites/libtests/i2c01 > > > On 02/04/15 08:48, Alexandru-Sever Horin wrote: > >> From: Alexandru-Sever Horin <alex.seve...@gmail.com> >> >> libi2c registration of a device fails if the device initialization fails >> Benefits: allows for device probing on multiple addresses >> --- >> cpukit/libi2c/libi2c.c | 27 ++++++++++++++++----------- >> 1 file changed, 16 insertions(+), 11 deletions(-) >> >> diff --git a/cpukit/libi2c/libi2c.c b/cpukit/libi2c/libi2c.c >> index 233cb68..315a761 100644 >> --- a/cpukit/libi2c/libi2c.c >> +++ b/cpukit/libi2c/libi2c.c >> @@ -736,6 +736,16 @@ rtems_libi2c_register_drv (const char *name, >> rtems_libi2c_drv_t * drvtbl, >> /* found a free slot; encode slot + 1 ! */ >> minor = ((i + 1) << 13) | RTEMS_LIBI2C_MAKE_MINOR (busno, >> i2caddr); >> + /* before registering, try to initialize the device to check >> it's there */ >> + if (drvtbl->ops->initialization_entry) { >> + err = drvtbl->ops->initialization_entry (rtems_libi2c_major, >> minor, 0); >> + if (err) { >> + LIBUNLOCK (); >> + /* returned value must be negative on failure */ >> + return err < 0 ? err : -err; >> + } >> + } >> + >> if (name) { >> size_t length = strlen (busses[busno].name) + strlen (name) + 2; >> str = malloc (length); >> @@ -751,9 +761,10 @@ rtems_libi2c_register_drv (const char *name, >> rtems_libi2c_drv_t * drvtbl, >> /* note that 'umask' is applied to 'mode' */ >> if (mknod (str, mode, dev)) { >> - safe_printf( DRVNM >> - "Creating device node failed: %s; you can try to do >> it manually...\n", >> - strerror (errno)); >> + safe_printf ( DRVNM >> + "Creating device node failed: %s;\n" >> + "you can try to do it manually...\n", >> + strerror (errno)); >> } >> free (str); >> @@ -761,17 +772,11 @@ rtems_libi2c_register_drv (const char *name, >> rtems_libi2c_drv_t * drvtbl, >> drvs[i].drv = drvtbl; >> - if (drvtbl->ops->initialization_entry) >> - err = >> - drvs[i].drv->ops->initialization_entry (rtems_libi2c_major, >> minor, >> - 0); >> - else >> - err = RTEMS_SUCCESSFUL; >> - >> LIBUNLOCK (); >> - return err ? -err : minor; >> + return minor; >> } >> } >> + >> LIBUNLOCK (); >> return -RTEMS_TOO_MANY; >> } >> > > -- > Sebastian Huber, embedded brains GmbH > > Address : Dornierstr. 4, D-82178 Puchheim, Germany > Phone : +49 89 189 47 41-16 > Fax : +49 89 189 47 41-09 > E-Mail : sebastian.hu...@embedded-brains.de > PGP : Public key available on request. > > Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel