qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Fwd: Trying to write a new device / virtio-i2c ?


From: Alex David
Subject: Re: [Qemu-devel] Fwd: Trying to write a new device / virtio-i2c ?
Date: Tue, 18 Feb 2014 14:44:49 +0100

Ok, thank you very much for your help then. I'm gonna spend some time on this.

If qemu-dev / you are interested in what I've done later, I'll send a new mail.



2014-02-18 14:05 GMT+01:00 Paolo Bonzini <address@hidden>:
Il 18/02/2014 13:48, Alex David ha scritto:

2014-02-17 17:11 GMT+01:00 Paolo Bonzini <address@hidden
<mailto:address@hidden>>:


    Il 17/02/2014 16:33, Alex David ha scritto:

            If you need more than one bus, you need a new device
        exposing the
            I2C bus, besides the new sensor devices.  USB-I2C could be
        one such
            device.

        So let me see if I understood well. USB-I2C (host QEMU device)
        seems a
        good idea, I could normally do : qemu-system-i386 -device
        usb-I2c,chardev=foo -device usb-i2c,chardev=bar -chardev
        socket,path=/tmp/test0,server,__nowait,id=foo -chardev
        socket,path=/tmp/test1,server,__nowait,id=bar.



    Almost. For QOM:

        -device usb-i2c,id=usb-i2c-0
        -device i2c-my-sensor,address=0x48,__bus=usb-i2c-0.0

    For chardev:

        -device usb-i2c,id=usb-i2c-0
        -chardev socket,path=/tmp/test0,server,__nowait,id=chr-foo-0
        -device
    i2c-my-sensor,address=0x48,__bus=usb-i2c-0.0,chardev=chr-__foo-0


    Repeat for the other buses, replacing -0 with -1 and -2.


        I need a "USB-I2C guest kernel driver" that would register a bus
        (i2c-1
        for chardev foo, i2c-2 for chardev bar etc...), I guess ?


    It exists already, drivers/i2c/busses/i2c-tiny-usb.c.


I'm now trying to write this new USB-I2C device, I look through some of
the code (dev-serial, dev-...), I used dev-serial code and removed the
code that wanted to declare a chardev (I don't need one to create my
bus, right ?).

Now I'm wondering, how will be i2c-tiny-usb launched and declare a new
/dev/i2c-N, with my device. I found :

static struct usb_device_id i2c_tiny_usb_table [] = {
    { USB_DEVICE(0x0403, 0xc631) },   /* FTDI */
    { USB_DEVICE(0x1c40, 0x0534) },   /* EZPrototypes */
    { }                               /* Terminating entry */
};

So I figured my USB-I2C should register using these numbers ?

static const USBDesc desc_i2c = {
    .id = {
        .idVendor          = 0x0403,
        .idProduct         = 0xc631,
        .bcdDevice         = 0x0400,
        .iManufacturer     = STR_MANUFACTURER,
        .iProduct          = STR_PRODUCT_I2C,
        .iSerialNumber     = STR_SERIALNUMBER,
    },
    .full = &desc_device,
    .str  = desc_strings,
};

However, this doesn't work, after a $ qemu-system-i386
debian_wheezy_i386_standard.qcow2 -usb -device USB-I2C,id=usb-i2c-0, the
driver doesn't seem to be used (/sys/class/i2c-dev/i2c-0/name isn't for
it...), even if I modprobe i2c-tiny-usb...
The dmesg shows it doesn't go into the "probe" function.

What did I miss ?

I honestly don't know, you'll have to debug it.

Paolo


reply via email to

[Prev in Thread] Current Thread [Next in Thread]