diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/firmware/dell_rbu.c | 174 | ||||
-rw-r--r-- | drivers/media/video/bttv-cards.c | 4 | ||||
-rw-r--r-- | drivers/net/e100.c | 224 | ||||
-rw-r--r-- | drivers/s390/cio/device.c | 2 | ||||
-rw-r--r-- | drivers/serial/imx.c | 39 | ||||
-rw-r--r-- | drivers/serial/pxa.c | 2 | ||||
-rw-r--r-- | drivers/serial/s3c2410.c | 15 | ||||
-rw-r--r-- | drivers/serial/sunsab.c | 1 | ||||
-rw-r--r-- | drivers/serial/sunzilog.c | 5 |
9 files changed, 158 insertions, 308 deletions
diff --git a/drivers/firmware/dell_rbu.c b/drivers/firmware/dell_rbu.c index b66782398258..4f4ba9b6d182 100644 --- a/drivers/firmware/dell_rbu.c +++ b/drivers/firmware/dell_rbu.c | |||
@@ -50,7 +50,7 @@ | |||
50 | MODULE_AUTHOR("Abhay Salunke <abhay_salunke@dell.com>"); | 50 | MODULE_AUTHOR("Abhay Salunke <abhay_salunke@dell.com>"); |
51 | MODULE_DESCRIPTION("Driver for updating BIOS image on DELL systems"); | 51 | MODULE_DESCRIPTION("Driver for updating BIOS image on DELL systems"); |
52 | MODULE_LICENSE("GPL"); | 52 | MODULE_LICENSE("GPL"); |
53 | MODULE_VERSION("2.0"); | 53 | MODULE_VERSION("3.0"); |
54 | 54 | ||
55 | #define BIOS_SCAN_LIMIT 0xffffffff | 55 | #define BIOS_SCAN_LIMIT 0xffffffff |
56 | #define MAX_IMAGE_LENGTH 16 | 56 | #define MAX_IMAGE_LENGTH 16 |
@@ -62,15 +62,16 @@ static struct _rbu_data { | |||
62 | int dma_alloc; | 62 | int dma_alloc; |
63 | spinlock_t lock; | 63 | spinlock_t lock; |
64 | unsigned long packet_read_count; | 64 | unsigned long packet_read_count; |
65 | unsigned long packet_write_count; | ||
66 | unsigned long num_packets; | 65 | unsigned long num_packets; |
67 | unsigned long packetsize; | 66 | unsigned long packetsize; |
67 | unsigned long imagesize; | ||
68 | int entry_created; | 68 | int entry_created; |
69 | } rbu_data; | 69 | } rbu_data; |
70 | 70 | ||
71 | static char image_type[MAX_IMAGE_LENGTH + 1] = "mono"; | 71 | static char image_type[MAX_IMAGE_LENGTH + 1] = "mono"; |
72 | module_param_string(image_type, image_type, sizeof (image_type), 0); | 72 | module_param_string(image_type, image_type, sizeof (image_type), 0); |
73 | MODULE_PARM_DESC(image_type, "BIOS image type. choose- mono or packet"); | 73 | MODULE_PARM_DESC(image_type, |
74 | "BIOS image type. choose- mono or packet or init"); | ||
74 | 75 | ||
75 | struct packet_data { | 76 | struct packet_data { |
76 | struct list_head list; | 77 | struct list_head list; |
@@ -88,55 +89,13 @@ static dma_addr_t dell_rbu_dmaaddr; | |||
88 | static void init_packet_head(void) | 89 | static void init_packet_head(void) |
89 | { | 90 | { |
90 | INIT_LIST_HEAD(&packet_data_head.list); | 91 | INIT_LIST_HEAD(&packet_data_head.list); |
91 | rbu_data.packet_write_count = 0; | ||
92 | rbu_data.packet_read_count = 0; | 92 | rbu_data.packet_read_count = 0; |
93 | rbu_data.num_packets = 0; | 93 | rbu_data.num_packets = 0; |
94 | rbu_data.packetsize = 0; | 94 | rbu_data.packetsize = 0; |
95 | rbu_data.imagesize = 0; | ||
95 | } | 96 | } |
96 | 97 | ||
97 | static int fill_last_packet(void *data, size_t length) | 98 | static int create_packet(void *data, size_t length) |
98 | { | ||
99 | struct list_head *ptemp_list; | ||
100 | struct packet_data *packet = NULL; | ||
101 | int packet_count = 0; | ||
102 | |||
103 | pr_debug("fill_last_packet: entry \n"); | ||
104 | |||
105 | if (!rbu_data.num_packets) { | ||
106 | pr_debug("fill_last_packet: num_packets=0\n"); | ||
107 | return -ENOMEM; | ||
108 | } | ||
109 | |||
110 | packet_count = rbu_data.num_packets; | ||
111 | |||
112 | ptemp_list = (&packet_data_head.list)->prev; | ||
113 | |||
114 | packet = list_entry(ptemp_list, struct packet_data, list); | ||
115 | |||
116 | if ((rbu_data.packet_write_count + length) > rbu_data.packetsize) { | ||
117 | pr_debug("dell_rbu:%s: packet size data " | ||
118 | "overrun\n", __FUNCTION__); | ||
119 | return -EINVAL; | ||
120 | } | ||
121 | |||
122 | pr_debug("fill_last_packet : buffer = %p\n", packet->data); | ||
123 | |||
124 | memcpy((packet->data + rbu_data.packet_write_count), data, length); | ||
125 | |||
126 | if ((rbu_data.packet_write_count + length) == rbu_data.packetsize) { | ||
127 | /* | ||
128 | * this was the last data chunk in the packet | ||
129 | * so reinitialize the packet data counter to zero | ||
130 | */ | ||
131 | rbu_data.packet_write_count = 0; | ||
132 | } else | ||
133 | rbu_data.packet_write_count += length; | ||
134 | |||
135 | pr_debug("fill_last_packet: exit \n"); | ||
136 | return 0; | ||
137 | } | ||
138 | |||
139 | static int create_packet(size_t length) | ||
140 | { | 99 | { |
141 | struct packet_data *newpacket; | 100 | struct packet_data *newpacket; |
142 | int ordernum = 0; | 101 | int ordernum = 0; |
@@ -186,9 +145,11 @@ static int create_packet(size_t length) | |||
186 | INIT_LIST_HEAD(&newpacket->list); | 145 | INIT_LIST_HEAD(&newpacket->list); |
187 | list_add_tail(&newpacket->list, &packet_data_head.list); | 146 | list_add_tail(&newpacket->list, &packet_data_head.list); |
188 | /* | 147 | /* |
189 | * packets have fixed size | 148 | * packets may not have fixed size |
190 | */ | 149 | */ |
191 | newpacket->length = rbu_data.packetsize; | 150 | newpacket->length = length; |
151 | |||
152 | memcpy(newpacket->data, data, length); | ||
192 | 153 | ||
193 | pr_debug("create_packet: exit \n"); | 154 | pr_debug("create_packet: exit \n"); |
194 | 155 | ||
@@ -198,13 +159,37 @@ static int create_packet(size_t length) | |||
198 | static int packetize_data(void *data, size_t length) | 159 | static int packetize_data(void *data, size_t length) |
199 | { | 160 | { |
200 | int rc = 0; | 161 | int rc = 0; |
162 | int done = 0; | ||
163 | int packet_length; | ||
164 | u8 *temp; | ||
165 | u8 *end = (u8 *) data + length; | ||
166 | pr_debug("packetize_data: data length %d\n", length); | ||
167 | if (!rbu_data.packetsize) { | ||
168 | printk(KERN_WARNING | ||
169 | "dell_rbu: packetsize not specified\n"); | ||
170 | return -EIO; | ||
171 | } | ||
201 | 172 | ||
202 | if (!rbu_data.packet_write_count) { | 173 | temp = (u8 *) data; |
203 | if ((rc = create_packet(length))) | 174 | |
175 | /* packetize the hunk */ | ||
176 | while (!done) { | ||
177 | if ((temp + rbu_data.packetsize) < end) | ||
178 | packet_length = rbu_data.packetsize; | ||
179 | else { | ||
180 | /* this is the last packet */ | ||
181 | packet_length = end - temp; | ||
182 | done = 1; | ||
183 | } | ||
184 | |||
185 | if ((rc = create_packet(temp, packet_length))) | ||
204 | return rc; | 186 | return rc; |
187 | |||
188 | pr_debug("%lu:%lu\n", temp, (end - temp)); | ||
189 | temp += packet_length; | ||
205 | } | 190 | } |
206 | if ((rc = fill_last_packet(data, length))) | 191 | |
207 | return rc; | 192 | rbu_data.imagesize = length; |
208 | 193 | ||
209 | return rc; | 194 | return rc; |
210 | } | 195 | } |
@@ -243,7 +228,7 @@ static int do_packet_read(char *data, struct list_head *ptemp_list, | |||
243 | return bytes_copied; | 228 | return bytes_copied; |
244 | } | 229 | } |
245 | 230 | ||
246 | static int packet_read_list(char *data, size_t *pread_length) | 231 | static int packet_read_list(char *data, size_t * pread_length) |
247 | { | 232 | { |
248 | struct list_head *ptemp_list; | 233 | struct list_head *ptemp_list; |
249 | int temp_count = 0; | 234 | int temp_count = 0; |
@@ -303,10 +288,9 @@ static void packet_empty_list(void) | |||
303 | newpacket->ordernum); | 288 | newpacket->ordernum); |
304 | kfree(newpacket); | 289 | kfree(newpacket); |
305 | } | 290 | } |
306 | rbu_data.packet_write_count = 0; | ||
307 | rbu_data.packet_read_count = 0; | 291 | rbu_data.packet_read_count = 0; |
308 | rbu_data.num_packets = 0; | 292 | rbu_data.num_packets = 0; |
309 | rbu_data.packetsize = 0; | 293 | rbu_data.imagesize = 0; |
310 | } | 294 | } |
311 | 295 | ||
312 | /* | 296 | /* |
@@ -425,7 +409,6 @@ static ssize_t read_packet_data(char *buffer, loff_t pos, size_t count) | |||
425 | size_t bytes_left; | 409 | size_t bytes_left; |
426 | size_t data_length; | 410 | size_t data_length; |
427 | char *ptempBuf = buffer; | 411 | char *ptempBuf = buffer; |
428 | unsigned long imagesize; | ||
429 | 412 | ||
430 | /* check to see if we have something to return */ | 413 | /* check to see if we have something to return */ |
431 | if (rbu_data.num_packets == 0) { | 414 | if (rbu_data.num_packets == 0) { |
@@ -434,22 +417,20 @@ static ssize_t read_packet_data(char *buffer, loff_t pos, size_t count) | |||
434 | goto read_rbu_data_exit; | 417 | goto read_rbu_data_exit; |
435 | } | 418 | } |
436 | 419 | ||
437 | imagesize = rbu_data.num_packets * rbu_data.packetsize; | 420 | if (pos > rbu_data.imagesize) { |
438 | |||
439 | if (pos > imagesize) { | ||
440 | retval = 0; | 421 | retval = 0; |
441 | printk(KERN_WARNING "dell_rbu:read_packet_data: " | 422 | printk(KERN_WARNING "dell_rbu:read_packet_data: " |
442 | "data underrun\n"); | 423 | "data underrun\n"); |
443 | goto read_rbu_data_exit; | 424 | goto read_rbu_data_exit; |
444 | } | 425 | } |
445 | 426 | ||
446 | bytes_left = imagesize - pos; | 427 | bytes_left = rbu_data.imagesize - pos; |
447 | data_length = min(bytes_left, count); | 428 | data_length = min(bytes_left, count); |
448 | 429 | ||
449 | if ((retval = packet_read_list(ptempBuf, &data_length)) < 0) | 430 | if ((retval = packet_read_list(ptempBuf, &data_length)) < 0) |
450 | goto read_rbu_data_exit; | 431 | goto read_rbu_data_exit; |
451 | 432 | ||
452 | if ((pos + count) > imagesize) { | 433 | if ((pos + count) > rbu_data.imagesize) { |
453 | rbu_data.packet_read_count = 0; | 434 | rbu_data.packet_read_count = 0; |
454 | /* this was the last copy */ | 435 | /* this was the last copy */ |
455 | retval = bytes_left; | 436 | retval = bytes_left; |
@@ -499,7 +480,7 @@ static ssize_t read_rbu_mono_data(char *buffer, loff_t pos, size_t count) | |||
499 | } | 480 | } |
500 | 481 | ||
501 | static ssize_t read_rbu_data(struct kobject *kobj, char *buffer, | 482 | static ssize_t read_rbu_data(struct kobject *kobj, char *buffer, |
502 | loff_t pos, size_t count) | 483 | loff_t pos, size_t count) |
503 | { | 484 | { |
504 | ssize_t ret_count = 0; | 485 | ssize_t ret_count = 0; |
505 | 486 | ||
@@ -531,13 +512,18 @@ static void callbackfn_rbu(const struct firmware *fw, void *context) | |||
531 | memcpy(rbu_data.image_update_buffer, | 512 | memcpy(rbu_data.image_update_buffer, |
532 | fw->data, fw->size); | 513 | fw->data, fw->size); |
533 | } else if (!strcmp(image_type, "packet")) { | 514 | } else if (!strcmp(image_type, "packet")) { |
534 | if (!rbu_data.packetsize) | 515 | /* |
535 | rbu_data.packetsize = fw->size; | 516 | * we need to free previous packets if a |
536 | else if (rbu_data.packetsize != fw->size) { | 517 | * new hunk of packets needs to be downloaded |
518 | */ | ||
519 | packet_empty_list(); | ||
520 | if (packetize_data(fw->data, fw->size)) | ||
521 | /* Incase something goes wrong when we are | ||
522 | * in middle of packetizing the data, we | ||
523 | * need to free up whatever packets might | ||
524 | * have been created before we quit. | ||
525 | */ | ||
537 | packet_empty_list(); | 526 | packet_empty_list(); |
538 | rbu_data.packetsize = fw->size; | ||
539 | } | ||
540 | packetize_data(fw->data, fw->size); | ||
541 | } else | 527 | } else |
542 | pr_debug("invalid image type specified.\n"); | 528 | pr_debug("invalid image type specified.\n"); |
543 | spin_unlock(&rbu_data.lock); | 529 | spin_unlock(&rbu_data.lock); |
@@ -553,7 +539,7 @@ static void callbackfn_rbu(const struct firmware *fw, void *context) | |||
553 | } | 539 | } |
554 | 540 | ||
555 | static ssize_t read_rbu_image_type(struct kobject *kobj, char *buffer, | 541 | static ssize_t read_rbu_image_type(struct kobject *kobj, char *buffer, |
556 | loff_t pos, size_t count) | 542 | loff_t pos, size_t count) |
557 | { | 543 | { |
558 | int size = 0; | 544 | int size = 0; |
559 | if (!pos) | 545 | if (!pos) |
@@ -562,7 +548,7 @@ static ssize_t read_rbu_image_type(struct kobject *kobj, char *buffer, | |||
562 | } | 548 | } |
563 | 549 | ||
564 | static ssize_t write_rbu_image_type(struct kobject *kobj, char *buffer, | 550 | static ssize_t write_rbu_image_type(struct kobject *kobj, char *buffer, |
565 | loff_t pos, size_t count) | 551 | loff_t pos, size_t count) |
566 | { | 552 | { |
567 | int rc = count; | 553 | int rc = count; |
568 | int req_firm_rc = 0; | 554 | int req_firm_rc = 0; |
@@ -621,25 +607,49 @@ static ssize_t write_rbu_image_type(struct kobject *kobj, char *buffer, | |||
621 | return rc; | 607 | return rc; |
622 | } | 608 | } |
623 | 609 | ||
610 | static ssize_t read_rbu_packet_size(struct kobject *kobj, char *buffer, | ||
611 | loff_t pos, size_t count) | ||
612 | { | ||
613 | int size = 0; | ||
614 | if (!pos) { | ||
615 | spin_lock(&rbu_data.lock); | ||
616 | size = sprintf(buffer, "%lu\n", rbu_data.packetsize); | ||
617 | spin_unlock(&rbu_data.lock); | ||
618 | } | ||
619 | return size; | ||
620 | } | ||
621 | |||
622 | static ssize_t write_rbu_packet_size(struct kobject *kobj, char *buffer, | ||
623 | loff_t pos, size_t count) | ||
624 | { | ||
625 | unsigned long temp; | ||
626 | spin_lock(&rbu_data.lock); | ||
627 | packet_empty_list(); | ||
628 | sscanf(buffer, "%lu", &temp); | ||
629 | if (temp < 0xffffffff) | ||
630 | rbu_data.packetsize = temp; | ||
631 | |||
632 | spin_unlock(&rbu_data.lock); | ||
633 | return count; | ||
634 | } | ||
635 | |||
624 | static struct bin_attribute rbu_data_attr = { | 636 | static struct bin_attribute rbu_data_attr = { |
625 | .attr = { | 637 | .attr = {.name = "data",.owner = THIS_MODULE,.mode = 0444}, |
626 | .name = "data", | ||
627 | .owner = THIS_MODULE, | ||
628 | .mode = 0444, | ||
629 | }, | ||
630 | .read = read_rbu_data, | 638 | .read = read_rbu_data, |
631 | }; | 639 | }; |
632 | 640 | ||
633 | static struct bin_attribute rbu_image_type_attr = { | 641 | static struct bin_attribute rbu_image_type_attr = { |
634 | .attr = { | 642 | .attr = {.name = "image_type",.owner = THIS_MODULE,.mode = 0644}, |
635 | .name = "image_type", | ||
636 | .owner = THIS_MODULE, | ||
637 | .mode = 0644, | ||
638 | }, | ||
639 | .read = read_rbu_image_type, | 643 | .read = read_rbu_image_type, |
640 | .write = write_rbu_image_type, | 644 | .write = write_rbu_image_type, |
641 | }; | 645 | }; |
642 | 646 | ||
647 | static struct bin_attribute rbu_packet_size_attr = { | ||
648 | .attr = {.name = "packet_size",.owner = THIS_MODULE,.mode = 0644}, | ||
649 | .read = read_rbu_packet_size, | ||
650 | .write = write_rbu_packet_size, | ||
651 | }; | ||
652 | |||
643 | static int __init dcdrbu_init(void) | 653 | static int __init dcdrbu_init(void) |
644 | { | 654 | { |
645 | int rc = 0; | 655 | int rc = 0; |
@@ -657,6 +667,8 @@ static int __init dcdrbu_init(void) | |||
657 | 667 | ||
658 | sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_data_attr); | 668 | sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_data_attr); |
659 | sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_image_type_attr); | 669 | sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_image_type_attr); |
670 | sysfs_create_bin_file(&rbu_device->dev.kobj, | ||
671 | &rbu_packet_size_attr); | ||
660 | 672 | ||
661 | rc = request_firmware_nowait(THIS_MODULE, FW_ACTION_NOHOTPLUG, | 673 | rc = request_firmware_nowait(THIS_MODULE, FW_ACTION_NOHOTPLUG, |
662 | "dell_rbu", &rbu_device->dev, &context, callbackfn_rbu); | 674 | "dell_rbu", &rbu_device->dev, &context, callbackfn_rbu); |
diff --git a/drivers/media/video/bttv-cards.c b/drivers/media/video/bttv-cards.c index 6c332800d6ab..0881a17d5226 100644 --- a/drivers/media/video/bttv-cards.c +++ b/drivers/media/video/bttv-cards.c | |||
@@ -2393,10 +2393,10 @@ struct tvcard bttv_tvcards[] = { | |||
2393 | .tuner = 0, | 2393 | .tuner = 0, |
2394 | .tuner_type = TUNER_LG_TDVS_H062F, | 2394 | .tuner_type = TUNER_LG_TDVS_H062F, |
2395 | .tuner_addr = ADDR_UNSET, | 2395 | .tuner_addr = ADDR_UNSET, |
2396 | .video_inputs = 2, | 2396 | .video_inputs = 3, |
2397 | .audio_inputs = 1, | 2397 | .audio_inputs = 1, |
2398 | .svhs = 2, | 2398 | .svhs = 2, |
2399 | .muxsel = { 2, 3 }, | 2399 | .muxsel = { 2, 3, 1 }, |
2400 | .gpiomask = 0x00e00007, | 2400 | .gpiomask = 0x00e00007, |
2401 | .audiomux = { 0x00400005, 0, 0x00000001, 0, 0x00c00007, 0 }, | 2401 | .audiomux = { 0x00400005, 0, 0x00000001, 0, 0x00c00007, 0 }, |
2402 | .no_msp34xx = 1, | 2402 | .no_msp34xx = 1, |
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index fbf1c06ec5c1..40887f09b681 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -903,8 +903,8 @@ static void mdio_write(struct net_device *netdev, int addr, int reg, int data) | |||
903 | 903 | ||
904 | static void e100_get_defaults(struct nic *nic) | 904 | static void e100_get_defaults(struct nic *nic) |
905 | { | 905 | { |
906 | struct param_range rfds = { .min = 16, .max = 256, .count = 256 }; | 906 | struct param_range rfds = { .min = 16, .max = 256, .count = 64 }; |
907 | struct param_range cbs = { .min = 64, .max = 256, .count = 128 }; | 907 | struct param_range cbs = { .min = 64, .max = 256, .count = 64 }; |
908 | 908 | ||
909 | pci_read_config_byte(nic->pdev, PCI_REVISION_ID, &nic->rev_id); | 909 | pci_read_config_byte(nic->pdev, PCI_REVISION_ID, &nic->rev_id); |
910 | /* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */ | 910 | /* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */ |
@@ -1007,213 +1007,25 @@ static void e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1007 | c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]); | 1007 | c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]); |
1008 | } | 1008 | } |
1009 | 1009 | ||
1010 | /********************************************************/ | ||
1011 | /* Micro code for 8086:1229 Rev 8 */ | ||
1012 | /********************************************************/ | ||
1013 | |||
1014 | /* Parameter values for the D101M B-step */ | ||
1015 | #define D101M_CPUSAVER_TIMER_DWORD 78 | ||
1016 | #define D101M_CPUSAVER_BUNDLE_DWORD 65 | ||
1017 | #define D101M_CPUSAVER_MIN_SIZE_DWORD 126 | ||
1018 | |||
1019 | #define D101M_B_RCVBUNDLE_UCODE \ | ||
1020 | {\ | ||
1021 | 0x00550215, 0xFFFF0437, 0xFFFFFFFF, 0x06A70789, 0xFFFFFFFF, 0x0558FFFF, \ | ||
1022 | 0x000C0001, 0x00101312, 0x000C0008, 0x00380216, \ | ||
1023 | 0x0010009C, 0x00204056, 0x002380CC, 0x00380056, \ | ||
1024 | 0x0010009C, 0x00244C0B, 0x00000800, 0x00124818, \ | ||
1025 | 0x00380438, 0x00000000, 0x00140000, 0x00380555, \ | ||
1026 | 0x00308000, 0x00100662, 0x00100561, 0x000E0408, \ | ||
1027 | 0x00134861, 0x000C0002, 0x00103093, 0x00308000, \ | ||
1028 | 0x00100624, 0x00100561, 0x000E0408, 0x00100861, \ | ||
1029 | 0x000C007E, 0x00222C21, 0x000C0002, 0x00103093, \ | ||
1030 | 0x00380C7A, 0x00080000, 0x00103090, 0x00380C7A, \ | ||
1031 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1032 | 0x0010009C, 0x00244C2D, 0x00010004, 0x00041000, \ | ||
1033 | 0x003A0437, 0x00044010, 0x0038078A, 0x00000000, \ | ||
1034 | 0x00100099, 0x00206C7A, 0x0010009C, 0x00244C48, \ | ||
1035 | 0x00130824, 0x000C0001, 0x00101213, 0x00260C75, \ | ||
1036 | 0x00041000, 0x00010004, 0x00130826, 0x000C0006, \ | ||
1037 | 0x002206A8, 0x0013C926, 0x00101313, 0x003806A8, \ | ||
1038 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1039 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1040 | 0x00080600, 0x00101B10, 0x00050004, 0x00100826, \ | ||
1041 | 0x00101210, 0x00380C34, 0x00000000, 0x00000000, \ | ||
1042 | 0x0021155B, 0x00100099, 0x00206559, 0x0010009C, \ | ||
1043 | 0x00244559, 0x00130836, 0x000C0000, 0x00220C62, \ | ||
1044 | 0x000C0001, 0x00101B13, 0x00229C0E, 0x00210C0E, \ | ||
1045 | 0x00226C0E, 0x00216C0E, 0x0022FC0E, 0x00215C0E, \ | ||
1046 | 0x00214C0E, 0x00380555, 0x00010004, 0x00041000, \ | ||
1047 | 0x00278C67, 0x00040800, 0x00018100, 0x003A0437, \ | ||
1048 | 0x00130826, 0x000C0001, 0x00220559, 0x00101313, \ | ||
1049 | 0x00380559, 0x00000000, 0x00000000, 0x00000000, \ | ||
1050 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1051 | 0x00000000, 0x00130831, 0x0010090B, 0x00124813, \ | ||
1052 | 0x000CFF80, 0x002606AB, 0x00041000, 0x00010004, \ | ||
1053 | 0x003806A8, 0x00000000, 0x00000000, 0x00000000, \ | ||
1054 | } | ||
1055 | |||
1056 | /********************************************************/ | ||
1057 | /* Micro code for 8086:1229 Rev 9 */ | ||
1058 | /********************************************************/ | ||
1059 | |||
1060 | /* Parameter values for the D101S */ | ||
1061 | #define D101S_CPUSAVER_TIMER_DWORD 78 | ||
1062 | #define D101S_CPUSAVER_BUNDLE_DWORD 67 | ||
1063 | #define D101S_CPUSAVER_MIN_SIZE_DWORD 128 | ||
1064 | |||
1065 | #define D101S_RCVBUNDLE_UCODE \ | ||
1066 | {\ | ||
1067 | 0x00550242, 0xFFFF047E, 0xFFFFFFFF, 0x06FF0818, 0xFFFFFFFF, 0x05A6FFFF, \ | ||
1068 | 0x000C0001, 0x00101312, 0x000C0008, 0x00380243, \ | ||
1069 | 0x0010009C, 0x00204056, 0x002380D0, 0x00380056, \ | ||
1070 | 0x0010009C, 0x00244F8B, 0x00000800, 0x00124818, \ | ||
1071 | 0x0038047F, 0x00000000, 0x00140000, 0x003805A3, \ | ||
1072 | 0x00308000, 0x00100610, 0x00100561, 0x000E0408, \ | ||
1073 | 0x00134861, 0x000C0002, 0x00103093, 0x00308000, \ | ||
1074 | 0x00100624, 0x00100561, 0x000E0408, 0x00100861, \ | ||
1075 | 0x000C007E, 0x00222FA1, 0x000C0002, 0x00103093, \ | ||
1076 | 0x00380F90, 0x00080000, 0x00103090, 0x00380F90, \ | ||
1077 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1078 | 0x0010009C, 0x00244FAD, 0x00010004, 0x00041000, \ | ||
1079 | 0x003A047E, 0x00044010, 0x00380819, 0x00000000, \ | ||
1080 | 0x00100099, 0x00206FFD, 0x0010009A, 0x0020AFFD, \ | ||
1081 | 0x0010009C, 0x00244FC8, 0x00130824, 0x000C0001, \ | ||
1082 | 0x00101213, 0x00260FF7, 0x00041000, 0x00010004, \ | ||
1083 | 0x00130826, 0x000C0006, 0x00220700, 0x0013C926, \ | ||
1084 | 0x00101313, 0x00380700, 0x00000000, 0x00000000, \ | ||
1085 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1086 | 0x00080600, 0x00101B10, 0x00050004, 0x00100826, \ | ||
1087 | 0x00101210, 0x00380FB6, 0x00000000, 0x00000000, \ | ||
1088 | 0x002115A9, 0x00100099, 0x002065A7, 0x0010009A, \ | ||
1089 | 0x0020A5A7, 0x0010009C, 0x002445A7, 0x00130836, \ | ||
1090 | 0x000C0000, 0x00220FE4, 0x000C0001, 0x00101B13, \ | ||
1091 | 0x00229F8E, 0x00210F8E, 0x00226F8E, 0x00216F8E, \ | ||
1092 | 0x0022FF8E, 0x00215F8E, 0x00214F8E, 0x003805A3, \ | ||
1093 | 0x00010004, 0x00041000, 0x00278FE9, 0x00040800, \ | ||
1094 | 0x00018100, 0x003A047E, 0x00130826, 0x000C0001, \ | ||
1095 | 0x002205A7, 0x00101313, 0x003805A7, 0x00000000, \ | ||
1096 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1097 | 0x00000000, 0x00000000, 0x00000000, 0x00130831, \ | ||
1098 | 0x0010090B, 0x00124813, 0x000CFF80, 0x00260703, \ | ||
1099 | 0x00041000, 0x00010004, 0x00380700 \ | ||
1100 | } | ||
1101 | |||
1102 | /********************************************************/ | ||
1103 | /* Micro code for the 8086:1229 Rev F/10 */ | ||
1104 | /********************************************************/ | ||
1105 | |||
1106 | /* Parameter values for the D102 E-step */ | ||
1107 | #define D102_E_CPUSAVER_TIMER_DWORD 42 | ||
1108 | #define D102_E_CPUSAVER_BUNDLE_DWORD 54 | ||
1109 | #define D102_E_CPUSAVER_MIN_SIZE_DWORD 46 | ||
1110 | |||
1111 | #define D102_E_RCVBUNDLE_UCODE \ | ||
1112 | {\ | ||
1113 | 0x007D028F, 0x0E4204F9, 0x14ED0C85, 0x14FA14E9, 0x0EF70E36, 0x1FFF1FFF, \ | ||
1114 | 0x00E014B9, 0x00000000, 0x00000000, 0x00000000, \ | ||
1115 | 0x00E014BD, 0x00000000, 0x00000000, 0x00000000, \ | ||
1116 | 0x00E014D5, 0x00000000, 0x00000000, 0x00000000, \ | ||
1117 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1118 | 0x00E014C1, 0x00000000, 0x00000000, 0x00000000, \ | ||
1119 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1120 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1121 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1122 | 0x00E014C8, 0x00000000, 0x00000000, 0x00000000, \ | ||
1123 | 0x00200600, 0x00E014EE, 0x00000000, 0x00000000, \ | ||
1124 | 0x0030FF80, 0x00940E46, 0x00038200, 0x00102000, \ | ||
1125 | 0x00E00E43, 0x00000000, 0x00000000, 0x00000000, \ | ||
1126 | 0x00300006, 0x00E014FB, 0x00000000, 0x00000000, \ | ||
1127 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1128 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1129 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1130 | 0x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000, \ | ||
1131 | 0x00906EFD, 0x00900EFD, 0x00E00EF8, 0x00000000, \ | ||
1132 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1133 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1134 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1135 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1136 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1137 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1138 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1139 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1140 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1141 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1142 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1143 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1144 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1145 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | ||
1146 | } | ||
1147 | |||
1148 | static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | 1010 | static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) |
1149 | { | 1011 | { |
1150 | /* *INDENT-OFF* */ | 1012 | int i; |
1151 | static struct { | 1013 | static const u32 ucode[UCODE_SIZE] = { |
1152 | u32 ucode[UCODE_SIZE + 1]; | 1014 | /* NFS packets are misinterpreted as TCO packets and |
1153 | u8 mac; | 1015 | * incorrectly routed to the BMC over SMBus. This |
1154 | u8 timer_dword; | 1016 | * microcode patch checks the fragmented IP bit in the |
1155 | u8 bundle_dword; | 1017 | * NFS/UDP header to distinguish between NFS and TCO. */ |
1156 | u8 min_size_dword; | 1018 | 0x0EF70E36, 0x1FFF1FFF, 0x1FFF1FFF, 0x1FFF1FFF, 0x1FFF1FFF, |
1157 | } ucode_opts[] = { | 1019 | 0x1FFF1FFF, 0x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000, |
1158 | { D101M_B_RCVBUNDLE_UCODE, | 1020 | 0x00906EFD, 0x00900EFD, 0x00E00EF8, |
1159 | mac_82559_D101M, | 1021 | }; |
1160 | D101M_CPUSAVER_TIMER_DWORD, | ||
1161 | D101M_CPUSAVER_BUNDLE_DWORD, | ||
1162 | D101M_CPUSAVER_MIN_SIZE_DWORD }, | ||
1163 | { D101S_RCVBUNDLE_UCODE, | ||
1164 | mac_82559_D101S, | ||
1165 | D101S_CPUSAVER_TIMER_DWORD, | ||
1166 | D101S_CPUSAVER_BUNDLE_DWORD, | ||
1167 | D101S_CPUSAVER_MIN_SIZE_DWORD }, | ||
1168 | { D102_E_RCVBUNDLE_UCODE, | ||
1169 | mac_82551_F, | ||
1170 | D102_E_CPUSAVER_TIMER_DWORD, | ||
1171 | D102_E_CPUSAVER_BUNDLE_DWORD, | ||
1172 | D102_E_CPUSAVER_MIN_SIZE_DWORD }, | ||
1173 | { D102_E_RCVBUNDLE_UCODE, | ||
1174 | mac_82551_10, | ||
1175 | D102_E_CPUSAVER_TIMER_DWORD, | ||
1176 | D102_E_CPUSAVER_BUNDLE_DWORD, | ||
1177 | D102_E_CPUSAVER_MIN_SIZE_DWORD }, | ||
1178 | { {0}, 0, 0, 0, 0} | ||
1179 | }, *opts; | ||
1180 | /* *INDENT-ON* */ | ||
1181 | |||
1182 | #define BUNDLESMALL 1 | ||
1183 | #define BUNDLEMAX 50 | ||
1184 | #define INTDELAY 15000 | ||
1185 | |||
1186 | opts = ucode_opts; | ||
1187 | |||
1188 | /* do not load u-code for ICH devices */ | ||
1189 | if (nic->flags & ich) | ||
1190 | return; | ||
1191 | |||
1192 | /* Search for ucode match against h/w rev_id */ | ||
1193 | while (opts->mac) { | ||
1194 | if (nic->mac == opts->mac) { | ||
1195 | int i; | ||
1196 | u32 *ucode = opts->ucode; | ||
1197 | |||
1198 | /* Insert user-tunable settings */ | ||
1199 | ucode[opts->timer_dword] &= 0xFFFF0000; | ||
1200 | ucode[opts->timer_dword] |= | ||
1201 | (u16) INTDELAY; | ||
1202 | ucode[opts->bundle_dword] &= 0xFFFF0000; | ||
1203 | ucode[opts->bundle_dword] |= (u16) BUNDLEMAX; | ||
1204 | ucode[opts->min_size_dword] &= 0xFFFF0000; | ||
1205 | ucode[opts->min_size_dword] |= | ||
1206 | (BUNDLESMALL) ? 0xFFFF : 0xFF80; | ||
1207 | |||
1208 | for(i = 0; i < UCODE_SIZE; i++) | ||
1209 | cb->u.ucode[i] = cpu_to_le32(ucode[i]); | ||
1210 | cb->command = cpu_to_le16(cb_ucode); | ||
1211 | return; | ||
1212 | } | ||
1213 | opts++; | ||
1214 | } | ||
1215 | 1022 | ||
1216 | cb->command = cpu_to_le16(cb_nop); | 1023 | if(nic->mac == mac_82551_F || nic->mac == mac_82551_10) { |
1024 | for(i = 0; i < UCODE_SIZE; i++) | ||
1025 | cb->u.ucode[i] = cpu_to_le32(ucode[i]); | ||
1026 | cb->command = cpu_to_le16(cb_ucode); | ||
1027 | } else | ||
1028 | cb->command = cpu_to_le16(cb_nop); | ||
1217 | } | 1029 | } |
1218 | 1030 | ||
1219 | static void e100_setup_iaaddr(struct nic *nic, struct cb *cb, | 1031 | static void e100_setup_iaaddr(struct nic *nic, struct cb *cb, |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 14c76f5e4177..9adc11e8b8bc 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -544,7 +544,7 @@ get_disc_ccwdev_by_devno(unsigned int devno, struct ccw_device *sibling) | |||
544 | .sibling = sibling, | 544 | .sibling = sibling, |
545 | }; | 545 | }; |
546 | 546 | ||
547 | dev = bus_find_device(&css_bus_type, NULL, &data, match_devno); | 547 | dev = bus_find_device(&ccw_bus_type, NULL, &data, match_devno); |
548 | 548 | ||
549 | return dev ? to_ccwdev(dev) : NULL; | 549 | return dev ? to_ccwdev(dev) : NULL; |
550 | } | 550 | } |
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index 53e0323d4b83..bdb4e454b8b0 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c | |||
@@ -73,7 +73,7 @@ struct imx_port { | |||
73 | struct uart_port port; | 73 | struct uart_port port; |
74 | struct timer_list timer; | 74 | struct timer_list timer; |
75 | unsigned int old_status; | 75 | unsigned int old_status; |
76 | int txirq,rxirq; | 76 | int txirq,rxirq,rtsirq; |
77 | }; | 77 | }; |
78 | 78 | ||
79 | /* | 79 | /* |
@@ -181,6 +181,22 @@ static void imx_start_tx(struct uart_port *port) | |||
181 | imx_transmit_buffer(sport); | 181 | imx_transmit_buffer(sport); |
182 | } | 182 | } |
183 | 183 | ||
184 | static irqreturn_t imx_rtsint(int irq, void *dev_id, struct pt_regs *regs) | ||
185 | { | ||
186 | struct imx_port *sport = (struct imx_port *)dev_id; | ||
187 | unsigned int val = USR1((u32)sport->port.membase)&USR1_RTSS; | ||
188 | unsigned long flags; | ||
189 | |||
190 | spin_lock_irqsave(&sport->port.lock, flags); | ||
191 | |||
192 | USR1((u32)sport->port.membase) = USR1_RTSD; | ||
193 | uart_handle_cts_change(&sport->port, !!val); | ||
194 | wake_up_interruptible(&sport->port.info->delta_msr_wait); | ||
195 | |||
196 | spin_unlock_irqrestore(&sport->port.lock, flags); | ||
197 | return IRQ_HANDLED; | ||
198 | } | ||
199 | |||
184 | static irqreturn_t imx_txint(int irq, void *dev_id, struct pt_regs *regs) | 200 | static irqreturn_t imx_txint(int irq, void *dev_id, struct pt_regs *regs) |
185 | { | 201 | { |
186 | struct imx_port *sport = (struct imx_port *)dev_id; | 202 | struct imx_port *sport = (struct imx_port *)dev_id; |
@@ -386,15 +402,21 @@ static int imx_startup(struct uart_port *port) | |||
386 | if (retval) goto error_out1; | 402 | if (retval) goto error_out1; |
387 | 403 | ||
388 | retval = request_irq(sport->txirq, imx_txint, 0, | 404 | retval = request_irq(sport->txirq, imx_txint, 0, |
389 | "imx-uart", sport); | 405 | DRIVER_NAME, sport); |
390 | if (retval) goto error_out2; | 406 | if (retval) goto error_out2; |
391 | 407 | ||
408 | retval = request_irq(sport->rtsirq, imx_rtsint, 0, | ||
409 | DRIVER_NAME, sport); | ||
410 | if (retval) goto error_out3; | ||
411 | set_irq_type(sport->rtsirq, IRQT_BOTHEDGE); | ||
412 | |||
392 | /* | 413 | /* |
393 | * Finally, clear and enable interrupts | 414 | * Finally, clear and enable interrupts |
394 | */ | 415 | */ |
395 | 416 | ||
417 | USR1((u32)sport->port.membase) = USR1_RTSD; | ||
396 | UCR1((u32)sport->port.membase) |= | 418 | UCR1((u32)sport->port.membase) |= |
397 | (UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_UARTEN); | 419 | (UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN); |
398 | 420 | ||
399 | UCR2((u32)sport->port.membase) |= (UCR2_RXEN | UCR2_TXEN); | 421 | UCR2((u32)sport->port.membase) |= (UCR2_RXEN | UCR2_TXEN); |
400 | /* | 422 | /* |
@@ -406,6 +428,8 @@ static int imx_startup(struct uart_port *port) | |||
406 | 428 | ||
407 | return 0; | 429 | return 0; |
408 | 430 | ||
431 | error_out3: | ||
432 | free_irq(sport->txirq, sport); | ||
409 | error_out2: | 433 | error_out2: |
410 | free_irq(sport->rxirq, sport); | 434 | free_irq(sport->rxirq, sport); |
411 | error_out1: | 435 | error_out1: |
@@ -424,6 +448,7 @@ static void imx_shutdown(struct uart_port *port) | |||
424 | /* | 448 | /* |
425 | * Free the interrupts | 449 | * Free the interrupts |
426 | */ | 450 | */ |
451 | free_irq(sport->rtsirq, sport); | ||
427 | free_irq(sport->txirq, sport); | 452 | free_irq(sport->txirq, sport); |
428 | free_irq(sport->rxirq, sport); | 453 | free_irq(sport->rxirq, sport); |
429 | 454 | ||
@@ -432,7 +457,7 @@ static void imx_shutdown(struct uart_port *port) | |||
432 | */ | 457 | */ |
433 | 458 | ||
434 | UCR1((u32)sport->port.membase) &= | 459 | UCR1((u32)sport->port.membase) &= |
435 | ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_UARTEN); | 460 | ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN); |
436 | } | 461 | } |
437 | 462 | ||
438 | static void | 463 | static void |
@@ -522,7 +547,7 @@ imx_set_termios(struct uart_port *port, struct termios *termios, | |||
522 | * disable interrupts and drain transmitter | 547 | * disable interrupts and drain transmitter |
523 | */ | 548 | */ |
524 | old_ucr1 = UCR1((u32)sport->port.membase); | 549 | old_ucr1 = UCR1((u32)sport->port.membase); |
525 | UCR1((u32)sport->port.membase) &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN); | 550 | UCR1((u32)sport->port.membase) &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN); |
526 | 551 | ||
527 | while ( !(USR2((u32)sport->port.membase) & USR2_TXDC)) | 552 | while ( !(USR2((u32)sport->port.membase) & USR2_TXDC)) |
528 | barrier(); | 553 | barrier(); |
@@ -643,6 +668,7 @@ static struct imx_port imx_ports[] = { | |||
643 | { | 668 | { |
644 | .txirq = UART1_MINT_TX, | 669 | .txirq = UART1_MINT_TX, |
645 | .rxirq = UART1_MINT_RX, | 670 | .rxirq = UART1_MINT_RX, |
671 | .rtsirq = UART1_MINT_RTS, | ||
646 | .port = { | 672 | .port = { |
647 | .type = PORT_IMX, | 673 | .type = PORT_IMX, |
648 | .iotype = SERIAL_IO_MEM, | 674 | .iotype = SERIAL_IO_MEM, |
@@ -658,6 +684,7 @@ static struct imx_port imx_ports[] = { | |||
658 | }, { | 684 | }, { |
659 | .txirq = UART2_MINT_TX, | 685 | .txirq = UART2_MINT_TX, |
660 | .rxirq = UART2_MINT_RX, | 686 | .rxirq = UART2_MINT_RX, |
687 | .rtsirq = UART2_MINT_RTS, | ||
661 | .port = { | 688 | .port = { |
662 | .type = PORT_IMX, | 689 | .type = PORT_IMX, |
663 | .iotype = SERIAL_IO_MEM, | 690 | .iotype = SERIAL_IO_MEM, |
@@ -737,7 +764,7 @@ imx_console_write(struct console *co, const char *s, unsigned int count) | |||
737 | 764 | ||
738 | UCR1((u32)sport->port.membase) = | 765 | UCR1((u32)sport->port.membase) = |
739 | (old_ucr1 | UCR1_UARTCLKEN | UCR1_UARTEN) | 766 | (old_ucr1 | UCR1_UARTCLKEN | UCR1_UARTEN) |
740 | & ~(UCR1_TXMPTYEN | UCR1_RRDYEN); | 767 | & ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN); |
741 | UCR2((u32)sport->port.membase) = old_ucr2 | UCR2_TXEN; | 768 | UCR2((u32)sport->port.membase) = old_ucr2 | UCR2_TXEN; |
742 | 769 | ||
743 | /* | 770 | /* |
diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c index 672b359b07ce..90c2a86c421b 100644 --- a/drivers/serial/pxa.c +++ b/drivers/serial/pxa.c | |||
@@ -499,7 +499,7 @@ serial_pxa_set_termios(struct uart_port *port, struct termios *termios, | |||
499 | /* | 499 | /* |
500 | * Update the per-port timeout. | 500 | * Update the per-port timeout. |
501 | */ | 501 | */ |
502 | uart_update_timeout(port, termios->c_cflag, quot); | 502 | uart_update_timeout(port, termios->c_cflag, baud); |
503 | 503 | ||
504 | up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; | 504 | up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; |
505 | if (termios->c_iflag & INPCK) | 505 | if (termios->c_iflag & INPCK) |
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index eff2158024c8..52692aa345ec 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c | |||
@@ -1092,8 +1092,8 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, | |||
1092 | 1092 | ||
1093 | static int probe_index = 0; | 1093 | static int probe_index = 0; |
1094 | 1094 | ||
1095 | int s3c24xx_serial_probe(struct device *_dev, | 1095 | static int s3c24xx_serial_probe(struct device *_dev, |
1096 | struct s3c24xx_uart_info *info) | 1096 | struct s3c24xx_uart_info *info) |
1097 | { | 1097 | { |
1098 | struct s3c24xx_uart_port *ourport; | 1098 | struct s3c24xx_uart_port *ourport; |
1099 | struct platform_device *dev = to_platform_device(_dev); | 1099 | struct platform_device *dev = to_platform_device(_dev); |
@@ -1120,7 +1120,7 @@ int s3c24xx_serial_probe(struct device *_dev, | |||
1120 | return ret; | 1120 | return ret; |
1121 | } | 1121 | } |
1122 | 1122 | ||
1123 | int s3c24xx_serial_remove(struct device *_dev) | 1123 | static int s3c24xx_serial_remove(struct device *_dev) |
1124 | { | 1124 | { |
1125 | struct uart_port *port = s3c24xx_dev_to_port(_dev); | 1125 | struct uart_port *port = s3c24xx_dev_to_port(_dev); |
1126 | 1126 | ||
@@ -1134,7 +1134,8 @@ int s3c24xx_serial_remove(struct device *_dev) | |||
1134 | 1134 | ||
1135 | #ifdef CONFIG_PM | 1135 | #ifdef CONFIG_PM |
1136 | 1136 | ||
1137 | int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, u32 level) | 1137 | static int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, |
1138 | u32 level) | ||
1138 | { | 1139 | { |
1139 | struct uart_port *port = s3c24xx_dev_to_port(dev); | 1140 | struct uart_port *port = s3c24xx_dev_to_port(dev); |
1140 | 1141 | ||
@@ -1144,7 +1145,7 @@ int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, u32 level) | |||
1144 | return 0; | 1145 | return 0; |
1145 | } | 1146 | } |
1146 | 1147 | ||
1147 | int s3c24xx_serial_resume(struct device *dev, u32 level) | 1148 | static int s3c24xx_serial_resume(struct device *dev, u32 level) |
1148 | { | 1149 | { |
1149 | struct uart_port *port = s3c24xx_dev_to_port(dev); | 1150 | struct uart_port *port = s3c24xx_dev_to_port(dev); |
1150 | struct s3c24xx_uart_port *ourport = to_ourport(port); | 1151 | struct s3c24xx_uart_port *ourport = to_ourport(port); |
@@ -1165,8 +1166,8 @@ int s3c24xx_serial_resume(struct device *dev, u32 level) | |||
1165 | #define s3c24xx_serial_resume NULL | 1166 | #define s3c24xx_serial_resume NULL |
1166 | #endif | 1167 | #endif |
1167 | 1168 | ||
1168 | int s3c24xx_serial_init(struct device_driver *drv, | 1169 | static int s3c24xx_serial_init(struct device_driver *drv, |
1169 | struct s3c24xx_uart_info *info) | 1170 | struct s3c24xx_uart_info *info) |
1170 | { | 1171 | { |
1171 | dbg("s3c24xx_serial_init(%p,%p)\n", drv, info); | 1172 | dbg("s3c24xx_serial_init(%p,%p)\n", drv, info); |
1172 | return driver_register(drv); | 1173 | return driver_register(drv); |
diff --git a/drivers/serial/sunsab.c b/drivers/serial/sunsab.c index e971156daa60..ba9381fd3f2d 100644 --- a/drivers/serial/sunsab.c +++ b/drivers/serial/sunsab.c | |||
@@ -274,7 +274,6 @@ static void transmit_chars(struct uart_sunsab_port *up, | |||
274 | if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) { | 274 | if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) { |
275 | up->interrupt_mask1 |= SAB82532_IMR1_XPR; | 275 | up->interrupt_mask1 |= SAB82532_IMR1_XPR; |
276 | writeb(up->interrupt_mask1, &up->regs->w.imr1); | 276 | writeb(up->interrupt_mask1, &up->regs->w.imr1); |
277 | uart_write_wakeup(&up->port); | ||
278 | return; | 277 | return; |
279 | } | 278 | } |
280 | 279 | ||
diff --git a/drivers/serial/sunzilog.c b/drivers/serial/sunzilog.c index d75445738c88..7653d6cf05af 100644 --- a/drivers/serial/sunzilog.c +++ b/drivers/serial/sunzilog.c | |||
@@ -517,10 +517,9 @@ static void sunzilog_transmit_chars(struct uart_sunzilog_port *up, | |||
517 | if (up->port.info == NULL) | 517 | if (up->port.info == NULL) |
518 | goto ack_tx_int; | 518 | goto ack_tx_int; |
519 | xmit = &up->port.info->xmit; | 519 | xmit = &up->port.info->xmit; |
520 | if (uart_circ_empty(xmit)) { | 520 | if (uart_circ_empty(xmit)) |
521 | uart_write_wakeup(&up->port); | ||
522 | goto ack_tx_int; | 521 | goto ack_tx_int; |
523 | } | 522 | |
524 | if (uart_tx_stopped(&up->port)) | 523 | if (uart_tx_stopped(&up->port)) |
525 | goto ack_tx_int; | 524 | goto ack_tx_int; |
526 | 525 | ||