diff options
Diffstat (limited to 'drivers/usb/serial/mos7720.c')
-rw-r--r-- | drivers/usb/serial/mos7720.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c index 1bf1ad066666..75267421aad8 100644 --- a/drivers/usb/serial/mos7720.c +++ b/drivers/usb/serial/mos7720.c | |||
@@ -1966,9 +1966,7 @@ static int mos7720_ioctl(struct tty_struct *tty, | |||
1966 | 1966 | ||
1967 | static int mos7720_startup(struct usb_serial *serial) | 1967 | static int mos7720_startup(struct usb_serial *serial) |
1968 | { | 1968 | { |
1969 | struct moschip_port *mos7720_port; | ||
1970 | struct usb_device *dev; | 1969 | struct usb_device *dev; |
1971 | int i; | ||
1972 | char data; | 1970 | char data; |
1973 | u16 product; | 1971 | u16 product; |
1974 | int ret_val; | 1972 | int ret_val; |
@@ -1999,29 +1997,6 @@ static int mos7720_startup(struct usb_serial *serial) | |||
1999 | serial->port[1]->interrupt_in_buffer = NULL; | 1997 | serial->port[1]->interrupt_in_buffer = NULL; |
2000 | } | 1998 | } |
2001 | 1999 | ||
2002 | |||
2003 | /* set up serial port private structures */ | ||
2004 | for (i = 0; i < serial->num_ports; ++i) { | ||
2005 | mos7720_port = kzalloc(sizeof(struct moschip_port), GFP_KERNEL); | ||
2006 | if (mos7720_port == NULL) { | ||
2007 | dev_err(&dev->dev, "%s - Out of memory\n", __func__); | ||
2008 | return -ENOMEM; | ||
2009 | } | ||
2010 | |||
2011 | /* Initialize all port interrupt end point to port 0 int | ||
2012 | * endpoint. Our device has only one interrupt endpoint | ||
2013 | * common to all ports */ | ||
2014 | serial->port[i]->interrupt_in_endpointAddress = | ||
2015 | serial->port[0]->interrupt_in_endpointAddress; | ||
2016 | |||
2017 | mos7720_port->port = serial->port[i]; | ||
2018 | usb_set_serial_port_data(serial->port[i], mos7720_port); | ||
2019 | |||
2020 | dev_dbg(&dev->dev, "port number is %d\n", serial->port[i]->number); | ||
2021 | dev_dbg(&dev->dev, "serial number is %d\n", serial->minor); | ||
2022 | } | ||
2023 | |||
2024 | |||
2025 | /* setting configuration feature to one */ | 2000 | /* setting configuration feature to one */ |
2026 | usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), | 2001 | usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), |
2027 | (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5*HZ); | 2002 | (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5*HZ); |
@@ -2049,8 +2024,6 @@ static int mos7720_startup(struct usb_serial *serial) | |||
2049 | 2024 | ||
2050 | static void mos7720_release(struct usb_serial *serial) | 2025 | static void mos7720_release(struct usb_serial *serial) |
2051 | { | 2026 | { |
2052 | int i; | ||
2053 | |||
2054 | #ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT | 2027 | #ifdef CONFIG_USB_SERIAL_MOS7715_PARPORT |
2055 | /* close the parallel port */ | 2028 | /* close the parallel port */ |
2056 | 2029 | ||
@@ -2089,9 +2062,36 @@ static void mos7720_release(struct usb_serial *serial) | |||
2089 | kref_put(&mos_parport->ref_count, destroy_mos_parport); | 2062 | kref_put(&mos_parport->ref_count, destroy_mos_parport); |
2090 | } | 2063 | } |
2091 | #endif | 2064 | #endif |
2092 | /* free private structure allocated for serial port */ | 2065 | } |
2093 | for (i = 0; i < serial->num_ports; ++i) | 2066 | |
2094 | kfree(usb_get_serial_port_data(serial->port[i])); | 2067 | static int mos7720_port_probe(struct usb_serial_port *port) |
2068 | { | ||
2069 | struct moschip_port *mos7720_port; | ||
2070 | |||
2071 | mos7720_port = kzalloc(sizeof(*mos7720_port), GFP_KERNEL); | ||
2072 | if (!mos7720_port) | ||
2073 | return -ENOMEM; | ||
2074 | |||
2075 | /* Initialize all port interrupt end point to port 0 int endpoint. | ||
2076 | * Our device has only one interrupt endpoint common to all ports. | ||
2077 | */ | ||
2078 | port->interrupt_in_endpointAddress = | ||
2079 | port->serial->port[0]->interrupt_in_endpointAddress; | ||
2080 | mos7720_port->port = port; | ||
2081 | |||
2082 | usb_set_serial_port_data(port, mos7720_port); | ||
2083 | |||
2084 | return 0; | ||
2085 | } | ||
2086 | |||
2087 | static int mos7720_port_remove(struct usb_serial_port *port) | ||
2088 | { | ||
2089 | struct moschip_port *mos7720_port; | ||
2090 | |||
2091 | mos7720_port = usb_get_serial_port_data(port); | ||
2092 | kfree(mos7720_port); | ||
2093 | |||
2094 | return 0; | ||
2095 | } | 2095 | } |
2096 | 2096 | ||
2097 | static struct usb_serial_driver moschip7720_2port_driver = { | 2097 | static struct usb_serial_driver moschip7720_2port_driver = { |
@@ -2109,6 +2109,8 @@ static struct usb_serial_driver moschip7720_2port_driver = { | |||
2109 | .probe = mos77xx_probe, | 2109 | .probe = mos77xx_probe, |
2110 | .attach = mos7720_startup, | 2110 | .attach = mos7720_startup, |
2111 | .release = mos7720_release, | 2111 | .release = mos7720_release, |
2112 | .port_probe = mos7720_port_probe, | ||
2113 | .port_remove = mos7720_port_remove, | ||
2112 | .ioctl = mos7720_ioctl, | 2114 | .ioctl = mos7720_ioctl, |
2113 | .tiocmget = mos7720_tiocmget, | 2115 | .tiocmget = mos7720_tiocmget, |
2114 | .tiocmset = mos7720_tiocmset, | 2116 | .tiocmset = mos7720_tiocmset, |