lkml.org 
[lkml]   [2006]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 5/13] isdn4linux: Siemens Gigaset drivers - sysfs usage
    From: Tilman Schmidt <tilman@imap.cc>, Hansjoerg Lipp <hjlipp@web.de>

    This patch corrects the way the Gigaset drivers create their sysfs
    entries. Please merge.

    Signed-off-by: Hansjoerg Lipp <hjlipp@web.de>
    Signed-off-by: Tilman Schmidt <tilman@imap.cc>
    ---

    drivers/isdn/gigaset/bas-gigaset.c | 20 ++++++++++----------
    drivers/isdn/gigaset/common.c | 6 ++++++
    drivers/isdn/gigaset/gigaset.h | 4 ++--
    drivers/isdn/gigaset/proc.c | 16 ++++++----------
    drivers/isdn/gigaset/usb-gigaset.c | 23 +++++++++++------------
    5 files changed, 35 insertions(+), 34 deletions(-)

    --- linux-2.6.16-gig-log/drivers/isdn/gigaset/gigaset.h 2006-04-02 18:40:48.000000000 +0200
    +++ linux-2.6.16-gig-sysfs/drivers/isdn/gigaset/gigaset.h 2006-04-02 18:41:27.000000000 +0200
    @@ -778,8 +778,8 @@ void gigaset_handle_modem_response(struc
    */

    /* initialize sysfs for device */
    -void gigaset_init_dev_sysfs(struct usb_interface *interface);
    -void gigaset_free_dev_sysfs(struct usb_interface *interface);
    +void gigaset_init_dev_sysfs(struct cardstate *cs);
    +void gigaset_free_dev_sysfs(struct cardstate *cs);

    /* ===========================================================================
    * Functions implemented in common.c/gigaset.h
    --- linux-2.6.16-gig-log/drivers/isdn/gigaset/common.c 2006-04-03 02:17:56.000000000 +0200
    +++ linux-2.6.16-gig-sysfs/drivers/isdn/gigaset/common.c 2006-04-02 18:40:48.000000000 +0200
    @@ -833,6 +833,9 @@ int gigaset_start(struct cardstate *cs)

    wait_event(cs->waitqueue, !cs->waiting);

    + /* set up device sysfs */
    + gigaset_init_dev_sysfs(cs);
    +
    up(&cs->sem);
    return 1;

    @@ -882,6 +885,9 @@ void gigaset_stop(struct cardstate *cs)
    {
    down(&cs->sem);

    + /* clear device sysfs */
    + gigaset_free_dev_sysfs(cs);
    +
    atomic_set(&cs->connected, 0);

    cs->waiting = 1;
    --- linux-2.6.16-gig-log/drivers/isdn/gigaset/proc.c 2006-04-03 02:17:56.000000000 +0200
    +++ linux-2.6.16-gig-sysfs/drivers/isdn/gigaset/proc.c 2006-04-02 18:41:27.000000000 +0200
    @@ -19,16 +19,14 @@
    static ssize_t show_cidmode(struct device *dev, struct device_attribute *attr,
    char *buf)
    {
    - struct usb_interface *intf = to_usb_interface(dev);
    - struct cardstate *cs = usb_get_intfdata(intf);
    + struct cardstate *cs = dev_get_drvdata(dev);
    return sprintf(buf, "%d\n", atomic_read(&cs->cidmode));
    }

    static ssize_t set_cidmode(struct device *dev, struct device_attribute *attr,
    const char *buf, size_t count)
    {
    - struct usb_interface *intf = to_usb_interface(dev);
    - struct cardstate *cs = usb_get_intfdata(intf);
    + struct cardstate *cs = dev_get_drvdata(dev);
    long int value;
    char *end;

    @@ -63,17 +61,15 @@ static ssize_t set_cidmode(struct device
    static DEVICE_ATTR(cidmode, S_IRUGO|S_IWUSR, show_cidmode, set_cidmode);

    /* free sysfs for device */
    -void gigaset_free_dev_sysfs(struct usb_interface *interface)
    +void gigaset_free_dev_sysfs(struct cardstate *cs)
    {
    gig_dbg(DEBUG_INIT, "removing sysfs entries");
    - device_remove_file(&interface->dev, &dev_attr_cidmode);
    + device_remove_file(cs->dev, &dev_attr_cidmode);
    }
    -EXPORT_SYMBOL_GPL(gigaset_free_dev_sysfs);

    /* initialize sysfs for device */
    -void gigaset_init_dev_sysfs(struct usb_interface *interface)
    +void gigaset_init_dev_sysfs(struct cardstate *cs)
    {
    gig_dbg(DEBUG_INIT, "setting up sysfs");
    - device_create_file(&interface->dev, &dev_attr_cidmode);
    + device_create_file(cs->dev, &dev_attr_cidmode);
    }
    -EXPORT_SYMBOL_GPL(gigaset_init_dev_sysfs);
    --- linux-2.6.16-gig-log/drivers/isdn/gigaset/bas-gigaset.c 2006-04-02 18:40:48.000000000 +0200
    +++ linux-2.6.16-gig-sysfs/drivers/isdn/gigaset/bas-gigaset.c 2006-04-02 18:41:27.000000000 +0200
    @@ -2217,7 +2217,7 @@ static int gigaset_probe(struct usb_inte
    usb_get_dev(udev);
    ucs->udev = udev;
    ucs->interface = interface;
    - cs->dev = &udev->dev;
    + cs->dev = &interface->dev;

    /* allocate URBs:
    * - one for the interrupt pipe
    @@ -2289,14 +2289,13 @@ static int gigaset_probe(struct usb_inte
    /* tell common part that the device is ready */
    if (startmode == SM_LOCKED)
    atomic_set(&cs->mstate, MS_LOCKED);
    - if (!gigaset_start(cs))
    - goto error;

    /* save address of controller structure */
    usb_set_intfdata(interface, cs);

    - /* set up device sysfs */
    - gigaset_init_dev_sysfs(interface);
    + if (!gigaset_start(cs))
    + goto error;
    +
    return 0;

    error:
    @@ -2313,23 +2312,24 @@ static void gigaset_disconnect(struct us
    struct cardstate *cs;
    struct bas_cardstate *ucs;

    - /* clear device sysfs */
    - gigaset_free_dev_sysfs(interface);
    -
    cs = usb_get_intfdata(interface);
    - usb_set_intfdata(interface, NULL);

    IFNULLRET(cs);
    ucs = cs->hw.bas;
    IFNULLRET(ucs);

    - dev_info(cs->dev, "disconnecting GigaSet base");
    + dev_info(cs->dev, "disconnecting Gigaset base\n");
    gigaset_stop(cs);
    freeurbs(cs);
    + usb_set_intfdata(interface, NULL);
    kfree(ucs->rcvbuf);
    ucs->rcvbuf = NULL;
    ucs->rcvbuf_size = 0;
    atomic_set(&ucs->basstate, 0);
    + usb_put_dev(ucs->udev);
    + ucs->interface = NULL;
    + ucs->udev = NULL;
    + cs->dev = NULL;
    gigaset_unassign(cs);
    }

    --- linux-2.6.16-gig-log/drivers/isdn/gigaset/usb-gigaset.c 2006-04-02 18:40:51.000000000 +0200
    +++ linux-2.6.16-gig-sysfs/drivers/isdn/gigaset/usb-gigaset.c 2006-04-02 18:41:29.000000000 +0200
    @@ -748,7 +748,10 @@ static int gigaset_probe(struct usb_inte
    usb_get_dev(udev);
    ucs->udev = udev;
    ucs->interface = interface;
    - cs->dev = &udev->dev;
    + cs->dev = &interface->dev;
    +
    + /* save address of controller structure */
    + usb_set_intfdata(interface, cs); // dev_set_drvdata(&interface->dev, cs);

    endpoint = &hostif->endpoint[0].desc;

    @@ -805,17 +808,12 @@ static int gigaset_probe(struct usb_inte
    /* tell common part that the device is ready */
    if (startmode == SM_LOCKED)
    atomic_set(&cs->mstate, MS_LOCKED);
    +
    if (!gigaset_start(cs)) {
    tasklet_kill(&cs->write_tasklet);
    retval = -ENODEV; //FIXME
    goto error;
    }
    -
    - /* save address of controller structure */
    - usb_set_intfdata(interface, cs);
    -
    - /* set up device sysfs */
    - gigaset_init_dev_sysfs(interface);
    return 0;

    error:
    @@ -827,6 +825,7 @@ error:
    kfree(cs->inbuf[0].rcvbuf);
    if (ucs->read_urb != NULL)
    usb_free_urb(ucs->read_urb);
    + usb_set_intfdata(interface, NULL);
    ucs->read_urb = ucs->bulk_out_urb = NULL;
    cs->inbuf[0].rcvbuf = ucs->bulk_out_buffer = NULL;
    usb_put_dev(ucs->udev);
    @@ -845,16 +844,12 @@ static void gigaset_disconnect(struct us
    struct usb_cardstate *ucs;

    cs = usb_get_intfdata(interface);
    -
    - /* clear device sysfs */
    - gigaset_free_dev_sysfs(interface);
    -
    - usb_set_intfdata(interface, NULL);
    ucs = cs->hw.usb;
    usb_kill_urb(ucs->read_urb);

    gigaset_stop(cs);

    + usb_set_intfdata(interface, NULL);
    tasklet_kill(&cs->write_tasklet);

    usb_kill_urb(ucs->bulk_out_urb); /* FIXME: only if active? */
    @@ -868,6 +863,10 @@ static void gigaset_disconnect(struct us
    ucs->read_urb = ucs->bulk_out_urb = NULL;
    cs->inbuf[0].rcvbuf = ucs->bulk_out_buffer = NULL;

    + usb_put_dev(ucs->udev);
    + ucs->interface = NULL;
    + ucs->udev = NULL;
    + cs->dev = NULL;
    gigaset_unassign(cs);
    }

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-04-04 02:02    [W:0.031 / U:93.264 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site