linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* IRDA/IRCOMM on a TiBook patch
@ 2001-10-16 10:47 Till Straumann
  2001-10-19  1:02 ` Michel Dänzer
  0 siblings, 1 reply; 6+ messages in thread
From: Till Straumann @ 2001-10-16 10:47 UTC (permalink / raw)
  To: linuxppc-dev, linux-irda

[-- Attachment #1: Type: text/plain, Size: 1219 bytes --]

Hi all.

I (and I believe other people as well) had problems
setting up IRDA/IRCOMM on a TiBook / 2.4.12-benh and
older 2.4 series kernels [on powerpc].

As far as I could find out there are several problems:

1) There seems to be a timing problem when opening
   the irda port which prevents it from being properly
   initialized.

   When I run "irattach /dev/ttyS1 -s 1", my Nokia 8890
   is never discovered. However, when I issue a 'cat /dev/ttyS1',
   prior to starting irattach (i.e. by opening the device
   [and holding it open until irattach starts]),
   things are properly initialized
   and discovery works. Putting 'mdelay(100);' somewhere
   in macserial.c:rs_open() does the job. However, I have
   not yet figured out what exactly causes the problem.
   A user space work-around involves patching irattach.c

2) There is an endianness bug. A possible solution is attached.

3) When applying 1) and 2), IRCOMM works provided that
   /proc/sys/net/irda/max_baud_rate is clamped to 57600.
   Apparently, there is another problem in 'macserial.c' where speeds
   higher than 57600 are treated especially.

Has somebody out there investigated on this?

-- Till.

PS: I'm not on this mailing list, please CC

[-- Attachment #2: irattach.patch --]
[-- Type: text/plain, Size: 483 bytes --]

*** irattach.c.orig	Tue Oct 16 03:32:01 2001
--- irattach.c	Tue Oct 16 03:34:56 2001
***************
*** 270,275 ****
--- 270,280 ----
  		syslog(LOG_ERR, "Failed to open %s: %m", dev);
  		exit(1);
  	}
+ 	/* T. Straumann, 10/2001: <strauman@slac.stanford.edu>
+ 	 *    Wait a little to work around a problem on the
+ 	 *    Apple TiBook...
+ 	 */
+ 	sleep(1);
  	if ((initfdflags = fcntl(fd, F_GETFL)) == -1) {
  		syslog(LOG_ERR, "Couldn't get device fd flags: %m");
  		exit(1);

[-- Attachment #3: irda.tillpatch0 --]
[-- Type: text/plain, Size: 9636 bytes --]

This patch against linux-2.4.12-benh0
fixes an endianness problem on the PPC
for IRDA.

To apply this patch, chdir to the linux
source topdir and issue

patch -p0 < 'this_file'

Till Straumann <strauman@slac.stanford.edu>, 10/2001

*** ./include/net/irda/parameters.h.orig	Mon Oct 15 00:50:17 2001
--- ./include/net/irda/parameters.h	Tue Oct 16 00:05:22 2001
***************
*** 25,30 ****
--- 25,33 ----
   *     along with this program; if not, write to the Free Software
   *     Foundation, Inc., 59 Temple Place, Suite 330, Boston,
   *     MA 02111-1307 USA
+  *
+  *     Till Straumann, <Till.Straumann@TU-Berlin.de>, 10/2001
+  *     - fixed endianness of irda_pv_t
   *
   ********************************************************************/

***************
*** 53,67 ****
  #define PV_PUT 0
  #define PV_GET 1

  typedef union {
  	char   *c;
! 	__u8    b;
! 	__u16   s;
  	__u32   i;
  	__u8  *bp;
  	__u16 *sp;
  	__u32 *ip;
  } irda_pv_t;

  typedef struct {
  	__u8 pi;
--- 56,92 ----
  #define PV_PUT 0
  #define PV_GET 1

+ #if   defined(__BIG_ENDIAN) 	/* TODO: not 64bit safe (when casting __u32 to ptr) */
  typedef union {
  	char   *c;
! 	struct {
! 	__u8    mm,ml,lm,ll;	/* most to least significant */
! 	}       b;
! 	struct {
! 	__u16   m,l;		/* most to least significant */
! 	}       s;
  	__u32   i;
  	__u8  *bp;
  	__u16 *sp;
  	__u32 *ip;
  } irda_pv_t;
+ #elif defined(__LITTLE_ENDIAN) 	/* TODO: not 64bit safe */
+ typedef union {
+ 	char   *c;
+ 	struct {
+ 	__u8    ll,lm,ml,mm;	/* least to most significant */
+ 	}       b;
+ 	struct {
+ 	__u16   l,m;		/* least to most significant */
+ 	}       s;
+ 	__u32   i;
+ 	__u8  *bp;
+ 	__u16 *sp;
+ 	__u32 *ip;
+ } irda_pv_t;
+ #else
+ #error "unknown endianness"
+ #endif

  typedef struct {
  	__u8 pi;
*** ./net/irda/ircomm/ircomm_param.c.orig	Mon Oct 15 01:03:54 2001
--- ./net/irda/ircomm/ircomm_param.c	Mon Oct 15 01:04:47 2001
***************
*** 182,194 ****
  				     int get)
  {
  	struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance;
! 	__u8 service_type = param->pv.b; /* We know it's a one byte integer */

  	ASSERT(self != NULL, return -1;);
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get) {
! 		param->pv.b = self->settings.service_type;
  		return 0;
  	}

--- 182,194 ----
  				     int get)
  {
  	struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance;
! 	__u8 service_type = param->pv.b.ll; /* We know it's a one byte integer */

  	ASSERT(self != NULL, return -1;);
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get) {
! 		param->pv.b.ll = self->settings.service_type;
  		return 0;
  	}

***************
*** 246,254 ****
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b = IRCOMM_SERIAL;
  	else {
! 		self->settings.port_type = param->pv.b;

  		IRDA_DEBUG(0, __FUNCTION__ "(), port type=%d\n",
  			   self->settings.port_type);
--- 246,254 ----
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b.ll = IRCOMM_SERIAL;
  	else {
! 		self->settings.port_type = param->pv.b.ll;

  		IRDA_DEBUG(0, __FUNCTION__ "(), port type=%d\n",
  			   self->settings.port_type);
***************
*** 317,325 ****
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b = self->settings.data_format;
  	else
! 		self->settings.data_format = param->pv.b;

  	return 0;
  }
--- 317,325 ----
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b.ll = self->settings.data_format;
  	else
! 		self->settings.data_format = param->pv.b.ll;

  	return 0;
  }
***************
*** 339,349 ****
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b = self->settings.flow_control;
  	else
! 		self->settings.flow_control = param->pv.b;

! 	IRDA_DEBUG(1, __FUNCTION__ "(), flow control = 0x%02x\n", param->pv.b);

  	return 0;
  }
--- 339,349 ----
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b.ll = self->settings.flow_control;
  	else
! 		self->settings.flow_control = param->pv.b.ll;

! 	IRDA_DEBUG(1, __FUNCTION__ "(), flow control = 0x%02x\n", param->pv.b.ll);

  	return 0;
  }
***************
*** 362,376 ****
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get) {
! 		param->pv.s = self->settings.xonxoff[0];
! 		param->pv.s |= self->settings.xonxoff[1] << 8;
  	} else {
! 		self->settings.xonxoff[0] = param->pv.s & 0xff;
! 		self->settings.xonxoff[1] = param->pv.s >> 8;
  	}

  	IRDA_DEBUG(0, __FUNCTION__ "(), XON/XOFF = 0x%02x,0x%02x\n",
! 		   param->pv.s & 0xff, param->pv.s >> 8);

  	return 0;
  }
--- 362,376 ----
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get) {
! 		param->pv.s.l = self->settings.xonxoff[0];
! 		param->pv.s.l |= self->settings.xonxoff[1] << 8;
  	} else {
! 		self->settings.xonxoff[0] = param->pv.s.l & 0xff;
! 		self->settings.xonxoff[1] = param->pv.s.l >> 8;
  	}

  	IRDA_DEBUG(0, __FUNCTION__ "(), XON/XOFF = 0x%02x,0x%02x\n",
! 		   param->pv.s.l & 0xff, param->pv.s.l >> 8);

  	return 0;
  }
***************
*** 389,403 ****
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get) {
! 		param->pv.s = self->settings.enqack[0];
! 		param->pv.s |= self->settings.enqack[1] << 8;
  	} else {
! 		self->settings.enqack[0] = param->pv.s & 0xff;
! 		self->settings.enqack[1] = param->pv.s >> 8;
  	}

  	IRDA_DEBUG(0, __FUNCTION__ "(), ENQ/ACK = 0x%02x,0x%02x\n",
! 		   param->pv.s & 0xff, param->pv.s >> 8);

  	return 0;
  }
--- 389,403 ----
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get) {
! 		param->pv.s.l = self->settings.enqack[0];
! 		param->pv.s.l |= self->settings.enqack[1] << 8;
  	} else {
! 		self->settings.enqack[0] = param->pv.s.l & 0xff;
! 		self->settings.enqack[1] = param->pv.s.l >> 8;
  	}

  	IRDA_DEBUG(0, __FUNCTION__ "(), ENQ/ACK = 0x%02x,0x%02x\n",
! 		   param->pv.s.l & 0xff, param->pv.s.l >> 8);

  	return 0;
  }
***************
*** 431,439 ****
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b = self->settings.dte;
  	else {
! 		dte = param->pv.b;

  		if (dte & IRCOMM_DELTA_DTR)
  			self->settings.dce |= (IRCOMM_DELTA_DSR|
--- 431,439 ----
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);

  	if (get)
! 		param->pv.b.ll = self->settings.dte;
  	else {
! 		dte = param->pv.b.ll;

  		if (dte & IRCOMM_DELTA_DTR)
  			self->settings.dce |= (IRCOMM_DELTA_DSR|
***************
*** 470,478 ****
  	struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance;
  	__u8 dce;

! 	IRDA_DEBUG(1, __FUNCTION__ "(), dce = 0x%02x\n", param->pv.b);

! 	dce = param->pv.b;

  	ASSERT(self != NULL, return -1;);
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);
--- 470,478 ----
  	struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance;
  	__u8 dce;

! 	IRDA_DEBUG(1, __FUNCTION__ "(), dce = 0x%02x\n", param->pv.b.ll);

! 	dce = param->pv.b.ll;

  	ASSERT(self != NULL, return -1;);
  	ASSERT(self->magic == IRCOMM_TTY_MAGIC, return -1;);
*** ./net/irda/parameters.c.orig	Fri Oct 12 05:04:55 2001
--- ./net/irda/parameters.c	Mon Oct 15 01:16:28 2001
***************
*** 167,180 ****
  	IRDA_DEBUG(2, __FUNCTION__ "(), pi=%#x, pl=%d, pi=%d\n", p.pi, p.pl, p.pv.i);
  	switch (p.pl) {
  	case 1:
! 		n += irda_param_pack(buf, "bbb", p.pi, p.pl, p.pv.b);
  		break;
  	case 2:
  		if (type & PV_BIG_ENDIAN)
! 			cpu_to_be16s(&p.pv.s);
  		else
! 			cpu_to_le16s(&p.pv.s);
! 		n += irda_param_pack(buf, "bbs", p.pi, p.pl, p.pv.s);
  		break;
  	case 4:
  		if (type & PV_BIG_ENDIAN)
--- 167,180 ----
  	IRDA_DEBUG(2, __FUNCTION__ "(), pi=%#x, pl=%d, pi=%d\n", p.pi, p.pl, p.pv.i);
  	switch (p.pl) {
  	case 1:
! 		n += irda_param_pack(buf, "bbb", p.pi, p.pl, p.pv.b.ll);
  		break;
  	case 2:
  		if (type & PV_BIG_ENDIAN)
! 			cpu_to_be16s(&p.pv.s.l);
  		else
! 			cpu_to_le16s(&p.pv.s.l);
! 		n += irda_param_pack(buf, "bbs", p.pi, p.pl, p.pv.s.l);
  		break;
  	case 4:
  		if (type & PV_BIG_ENDIAN)
***************
*** 230,245 ****
  		return p.pl+2;
  	}

  	switch (p.pl) {
  	case 1:
! 		n += irda_param_unpack(buf+2, "b", &p.pv.b);
  		break;
  	case 2:
! 		n += irda_param_unpack(buf+2, "s", &p.pv.s);
  		if (type & PV_BIG_ENDIAN)
! 			be16_to_cpus(&p.pv.s);
  		else
! 			le16_to_cpus(&p.pv.s);
  		break;
  	case 4:
  		n += irda_param_unpack(buf+2, "i", &p.pv.i);
--- 230,246 ----
  		return p.pl+2;
  	}

+
  	switch (p.pl) {
  	case 1:
! 		n += irda_param_unpack(buf+2, "b", &p.pv.b.ll);
  		break;
  	case 2:
! 		n += irda_param_unpack(buf+2, "s", &p.pv.s.l);
  		if (type & PV_BIG_ENDIAN)
! 			be16_to_cpus(&p.pv.s.l);
  		else
! 			le16_to_cpus(&p.pv.s.l);
  		break;
  	case 4:
  		n += irda_param_unpack(buf+2, "i", &p.pv.i);
***************
*** 255,260 ****
--- 256,262 ----
  		return p.pl+2;
  	}

+ 	IRDA_DEBUG(2, __FUNCTION__ "(), pi=%#x, pl=%d, pi=%d\n", p.pi, p.pl, p.pv.i);
  	/* Call handler for this parameter */
  	err = (*func)(self, &p, PV_PUT);
  	if (err < 0)
***************
*** 359,366 ****
  			buf[n++] = (__u8)va_arg(args, int);
  			break;
  		case 's':  /* 16 bits unsigned short */
! 			arg.s = (__u16)va_arg(args, int);
! 			put_unaligned(arg.s, (__u16 *)(buf+n)); n+=2;
  			break;
  		case 'i':  /* 32 bits unsigned integer */
  			arg.i = va_arg(args, __u32);
--- 361,368 ----
  			buf[n++] = (__u8)va_arg(args, int);
  			break;
  		case 's':  /* 16 bits unsigned short */
! 			arg.s.l = (__u16)va_arg(args, int);
! 			put_unaligned(arg.s.l, (__u16 *)(buf+n)); n+=2;
  			break;
  		case 'i':  /* 32 bits unsigned integer */
  			arg.i = va_arg(args, __u32);

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

* Re: IRDA/IRCOMM on a TiBook patch
  2001-10-16 10:47 IRDA/IRCOMM on a TiBook patch Till Straumann
@ 2001-10-19  1:02 ` Michel Dänzer
  2001-10-19  6:37   ` Till Straumann
  0 siblings, 1 reply; 6+ messages in thread
From: Michel Dänzer @ 2001-10-19  1:02 UTC (permalink / raw)
  To: Till Straumann; +Cc: linuxppc-dev, linux-irda


On Tue, 2001-10-16 at 12:47, Till Straumann wrote:

> I (and I believe other people as well) had problems
> setting up IRDA/IRCOMM on a TiBook / 2.4.12-benh and
> older 2.4 series kernels [on powerpc].
>
> As far as I could find out there are several problems:
>
> 1) There seems to be a timing problem when opening
>    the irda port which prevents it from being properly
>    initialized.
>
>    When I run "irattach /dev/ttyS1 -s 1", my Nokia 8890
>    is never discovered. However, when I issue a 'cat /dev/ttyS1',
>    prior to starting irattach (i.e. by opening the device
>    [and holding it open until irattach starts]),
>    things are properly initialized
>    and discovery works. Putting 'mdelay(100);' somewhere
>    in macserial.c:rs_open() does the job. However, I have
>    not yet figured out what exactly causes the problem.
>    A user space work-around involves patching irattach.c
>
> 2) There is an endianness bug. A possible solution is attached.

Your patch seems to be missing a bit (in qos.c IIRC) though.

> 3) When applying 1) and 2), IRCOMM works provided that
>    /proc/sys/net/irda/max_baud_rate is clamped to 57600.
>    Apparently, there is another problem in 'macserial.c' where speeds
>    higher than 57600 are treated especially.

Have you managed to do anything 'real' yet? I tried your patch, and it
does seem to improve things, irdadump seems to show data from my Palm,
but I haven't succeeded to synchronize yet.


--
Earthling Michel Dänzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member   /  CS student, Free Software enthusiast

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

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

* Re: IRDA/IRCOMM on a TiBook patch
  2001-10-19  1:02 ` Michel Dänzer
@ 2001-10-19  6:37   ` Till Straumann
  2001-10-19 14:10     ` Michel Dänzer
  0 siblings, 1 reply; 6+ messages in thread
From: Till Straumann @ 2001-10-19  6:37 UTC (permalink / raw)
  To: Michel Dänzer; +Cc: linuxppc-dev, linux-irda


Michel Dänzer wrote:
>
> On Tue, 2001-10-16 at 12:47, Till Straumann wrote:
>
> > I (and I believe other people as well) had problems
> > setting up IRDA/IRCOMM on a TiBook / 2.4.12-benh and
> > older 2.4 series kernels [on powerpc].
> >
> > As far as I could find out there are several problems:
> >
> > 1) There seems to be a timing problem when opening
> >    the irda port which prevents it from being properly
> >    initialized.
> >
> >    When I run "irattach /dev/ttyS1 -s 1", my Nokia 8890
> >    is never discovered. However, when I issue a 'cat /dev/ttyS1',
> >    prior to starting irattach (i.e. by opening the device
> >    [and holding it open until irattach starts]),
> >    things are properly initialized
> >    and discovery works. Putting 'mdelay(100);' somewhere
> >    in macserial.c:rs_open() does the job. However, I have
> >    not yet figured out what exactly causes the problem.
> >    A user space work-around involves patching irattach.c
> >
> > 2) There is an endianness bug. A possible solution is attached.
>
> Your patch seems to be missing a bit (in qos.c IIRC) though.

What is it missing? Please, be a little bit more verbose :-)

>
> > 3) When applying 1) and 2), IRCOMM works provided that
> >    /proc/sys/net/irda/max_baud_rate is clamped to 57600.
> >    Apparently, there is another problem in 'macserial.c' where speeds
> >    higher than 57600 are treated especially.
>
> Have you managed to do anything 'real' yet? I tried your patch, and it
> does seem to improve things, irdadump seems to show data from my Palm,
> but I haven't succeeded to synchronize yet.
>

Sure - I can open a modem connection to my cellphone and issue any AT
command I want. However, I have to take care of all of the three issues
mentioned. (I.e. use patched irattach, use patched kernel and
echo 57600 > /proc/sys/net/irda/max_baud_rate).

-- Till

> --
> Earthling Michel Dänzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
> XFree86 and DRI project member   /  CS student, Free Software enthusiast

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

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

* Re: IRDA/IRCOMM on a TiBook patch
  2001-10-19  6:37   ` Till Straumann
@ 2001-10-19 14:10     ` Michel Dänzer
  2001-10-19 17:24       ` IRDA/IRCOMM on a TiBook patch (UPDATED) Till Straumann
  0 siblings, 1 reply; 6+ messages in thread
From: Michel Dänzer @ 2001-10-19 14:10 UTC (permalink / raw)
  To: Till Straumann; +Cc: linuxppc-dev, linux-irda


On Fri, 2001-10-19 at 08:37, Till Straumann wrote:
>
> Michel Dänzer wrote:
> >
> > On Tue, 2001-10-16 at 12:47, Till Straumann wrote:
> >
> > > I (and I believe other people as well) had problems
> > > setting up IRDA/IRCOMM on a TiBook / 2.4.12-benh and
> > > older 2.4 series kernels [on powerpc].
> > >
> > > As far as I could find out there are several problems:
> > >
> > > 1) There seems to be a timing problem when opening
> > >    the irda port which prevents it from being properly
> > >    initialized.
> > >
> > >    When I run "irattach /dev/ttyS1 -s 1", my Nokia 8890
> > >    is never discovered. However, when I issue a 'cat /dev/ttyS1',
> > >    prior to starting irattach (i.e. by opening the device
> > >    [and holding it open until irattach starts]),
> > >    things are properly initialized
> > >    and discovery works. Putting 'mdelay(100);' somewhere
> > >    in macserial.c:rs_open() does the job. However, I have
> > >    not yet figured out what exactly causes the problem.
> > >    A user space work-around involves patching irattach.c
> > >
> > > 2) There is an endianness bug. A possible solution is attached.
> >
> > Your patch seems to be missing a bit (in qos.c IIRC) though.
>
> What is it missing? Please, be a little bit more verbose :-)

The same thing you're doing for the other files, i.e. replace param->pv.b
by param->pv.b.ll and param->pv.s by param->pv.s.l . The build fails for
that file otherwise.

I'm talking about net/irda/qos.c BTW.


> > > 3) When applying 1) and 2), IRCOMM works provided that
> > >    /proc/sys/net/irda/max_baud_rate is clamped to 57600.
> > >    Apparently, there is another problem in 'macserial.c' where speeds
> > >    higher than 57600 are treated especially.
> >
> > Have you managed to do anything 'real' yet? I tried your patch, and it
> > does seem to improve things, irdadump seems to show data from my Palm,
> > but I haven't succeeded to synchronize yet.
> >
>
> Sure - I can open a modem connection to my cellphone and issue any AT
> command I want. However, I have to take care of all of the three issues
> mentioned. (I.e. use patched irattach, use patched kernel and
> echo 57600 > /proc/sys/net/irda/max_baud_rate).

I have done the latter two and used cat to work around the first. I see
something with irdadump but none of the pilot sync tools work. I'm
afraid they're broken on PPC yet. :(


--
Earthling Michel Dänzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member   /  CS student, Free Software enthusiast

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

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

* Re: IRDA/IRCOMM on a TiBook patch (UPDATED)
  2001-10-19 14:10     ` Michel Dänzer
@ 2001-10-19 17:24       ` Till Straumann
  2001-10-20  1:13         ` Michel Dänzer
  0 siblings, 1 reply; 6+ messages in thread
From: Till Straumann @ 2001-10-19 17:24 UTC (permalink / raw)
  To: Michel Dänzer; +Cc: linuxppc-dev, linux-irda


Michel Dänzer wrote:
>
> On Fri, 2001-10-19 at 08:37, Till Straumann wrote:
> >
> > Michel Dänzer wrote:
> > >
> > > On Tue, 2001-10-16 at 12:47, Till Straumann wrote:
> > >
> > > > I (and I believe other people as well) had problems
> > > > setting up IRDA/IRCOMM on a TiBook / 2.4.12-benh and
> > > > older 2.4 series kernels [on powerpc].
> > > >
> > > > As far as I could find out there are several problems:
> > > >
> > > > 1) There seems to be a timing problem when opening
> > > >    the irda port which prevents it from being properly
> > > >    initialized.
> > > >
> > > >    When I run "irattach /dev/ttyS1 -s 1", my Nokia 8890
> > > >    is never discovered. However, when I issue a 'cat /dev/ttyS1',
> > > >    prior to starting irattach (i.e. by opening the device
> > > >    [and holding it open until irattach starts]),
> > > >    things are properly initialized
> > > >    and discovery works. Putting 'mdelay(100);' somewhere
> > > >    in macserial.c:rs_open() does the job. However, I have
> > > >    not yet figured out what exactly causes the problem.
> > > >    A user space work-around involves patching irattach.c
> > > >
> > > > 2) There is an endianness bug. A possible solution is attached.
> > >
> > > Your patch seems to be missing a bit (in qos.c IIRC) though.
> >
> > What is it missing? Please, be a little bit more verbose :-)
>
> The same thing you're doing for the other files, i.e. replace param->pv.b
> by param->pv.b.ll and param->pv.s by param->pv.s.l . The build fails for
> that file otherwise.
>

Oops - thanks for pointing this out. I had fixed it but forgotten to
keep
the original version and therefore, the patch generator  missed that
one...

> I'm talking about net/irda/qos.c BTW.
>
> > > > 3) When applying 1) and 2), IRCOMM works provided that
> > > >    /proc/sys/net/irda/max_baud_rate is clamped to 57600.
> > > >    Apparently, there is another problem in 'macserial.c' where speeds
> > > >    higher than 57600 are treated especially.
> > >
> > > Have you managed to do anything 'real' yet? I tried your patch, and it
> > > does seem to improve things, irdadump seems to show data from my Palm,
> > > but I haven't succeeded to synchronize yet.
> > >
> >
> > Sure - I can open a modem connection to my cellphone and issue any AT
> > command I want. However, I have to take care of all of the three issues
> > mentioned. (I.e. use patched irattach, use patched kernel and
> > echo 57600 > /proc/sys/net/irda/max_baud_rate).
>
> I have done the latter two and used cat to work around the first. I see
> something with irdadump but none of the pilot sync tools work. I'm
> afraid they're broken on PPC yet. :(

Hmm - I still have one of the old PalmPilot devices without irda. What
exactly
do you see with irdadump? (Forgive me the stupid question: you have set
PILOT_PORT to /dev/ircomm0, right?)

--Till

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

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

* Re: IRDA/IRCOMM on a TiBook patch (UPDATED)
  2001-10-19 17:24       ` IRDA/IRCOMM on a TiBook patch (UPDATED) Till Straumann
@ 2001-10-20  1:13         ` Michel Dänzer
  0 siblings, 0 replies; 6+ messages in thread
From: Michel Dänzer @ 2001-10-20  1:13 UTC (permalink / raw)
  To: Till Straumann; +Cc: linuxppc-dev, linux-irda


On Fri, 2001-10-19 at 19:24, Till Straumann wrote:
>
> Michel Dänzer wrote:
> >
> > On Fri, 2001-10-19 at 08:37, Till Straumann wrote:
> > >
> > > Michel Dänzer wrote:
> > > >
> > > > Have you managed to do anything 'real' yet? I tried your patch, and it
> > > > does seem to improve things, irdadump seems to show data from my Palm,
> > > > but I haven't succeeded to synchronize yet.
> > >
> > > Sure - I can open a modem connection to my cellphone and issue any AT
> > > command I want. However, I have to take care of all of the three issues
> > > mentioned. (I.e. use patched irattach, use patched kernel and
> > > echo 57600 > /proc/sys/net/irda/max_baud_rate).
> >
> > I have done the latter two and used cat to work around the first. I see
> > something with irdadump but none of the pilot sync tools work. I'm
> > afraid they're broken on PPC yet. :(
>
> Hmm - I still have one of the old PalmPilot devices without irda. What
> exactly do you see with irdadump? (Forgive me the stupid question: you
> have set PILOT_PORT to /dev/ircomm0, right?)

No, of course I hadn't... I still don't, but now /dev/pilot points to
it. I was foolishly thinking it should point to /dev/ttyS1 as well.

So now I just finished synchronizing my Palm from within Linux for the
first time! There goes the last reason to boot into MacOS. :)

Thanks so much, I hope this gets integrated and the macserial driver
propoerly fixed soon.


--
Earthling Michel Dänzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member   /  CS student, Free Software enthusiast

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

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

end of thread, other threads:[~2001-10-20  1:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-10-16 10:47 IRDA/IRCOMM on a TiBook patch Till Straumann
2001-10-19  1:02 ` Michel Dänzer
2001-10-19  6:37   ` Till Straumann
2001-10-19 14:10     ` Michel Dänzer
2001-10-19 17:24       ` IRDA/IRCOMM on a TiBook patch (UPDATED) Till Straumann
2001-10-20  1:13         ` Michel Dänzer

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