[mythtv-users] lirc_serial problem with 2.6.32 Fedora 12

David Gesswein djg at pdp8online.com
Thu Feb 11 00:06:20 UTC 2010


The problem is an incompatible define for LIRC_GET_FEATURES between the
kernel and lirc. I put a print in lirc_dev.c where its handles 
the ioctl and the call argument passed in doesn't match.
lirc_dev: fop called cmd 80046900 LIRC_GET_FEATURES 80086900

I think the problem is the kernel define has been changed to a uint64_t for
LIRC_GET_FEATURES but nothing else seems to have been changed. This is all
from Fedora 12 sources.

The message about device 61 is part of the error reporting code and not the
actual failure.

In linux-2.6.32.i686/include/linux/lirc.h we have this define
#define LIRC_GET_FEATURES              _IOR('i', 0x00000000, uint64_t)
In linux-2.6.32.i686/drivers/input/lirc/lirc_dev.c we have it still returning
a long
        case LIRC_GET_FEATURES:
            result = put_user(ir->d.features, (unsigned long *)arg);

In lirc-0.8.6/drivers/lirc.h we have
#define LIRC_GET_FEATURES              _IOR('i', 0x00000000, unsigned long)
In lirc-0.8.6/config.h we have
#define LIRC_MAJOR 61
In lirc-0.8.6/daemons/hw_default.c if the get features fails it prints
LIRC_MAJOR if the device doesn't match it.
        else if(default_ioctl(LIRC_GET_FEATURES, &hw.features)==-1)
        {
                logprintf(LOG_ERR,"could not get hardware features");
                logprintf(LOG_ERR,"this device driver does not "
                          "support the LIRC ioctl interface");
                if(major(s.st_rdev) == 13)
                {
                        logprintf(LOG_ERR, "did you mean to use the devinput "
                                  "driver instead of the %s driver?",
                                  hw.name);
                }
                else if(major(s.st_rdev) != LIRC_MAJOR)
                {
                        logprintf(LOG_ERR, "major number of %s is %lu",
                                  hw.device,
                                  (unsigned long) major(s.st_rdev));
                        logprintf(LOG_ERR, "LIRC major number is %lu",
                                  (unsigned long) LIRC_MAJOR);



More information about the mythtv-users mailing list