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:1.973 / U:0.052 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site