aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-04-04 15:14:44 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-04-04 15:14:44 -0400
commitdb217dece3003df0841bacf9556b5c06aa097dae (patch)
tree08612e7696c04c4d8fc2207c3ccf2356f945d230 /drivers
parent8ce42c8b7fdf4fc008a6fc7349beb8f4dd5cb774 (diff)
parentbdd32ce95f79fb5cc964cd789d7ae4500bba7c6f (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sunxvr500: Ignore secondary output PCI devices. sparc64: Implement perf_arch_fetch_caller_regs sparc64: Update defconfig. sparc64: Fix array size reported by vmemmap_populate() sparc: Fix regset register window handling. drivers/serial/sunsu.c: Correct use after free
Diffstat (limited to 'drivers')
-rw-r--r--drivers/serial/sunsu.c4
-rw-r--r--drivers/video/sunxvr500.c24
2 files changed, 20 insertions, 8 deletions
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c
index 170d3d68c8f0..cbcfb1885f79 100644
--- a/drivers/serial/sunsu.c
+++ b/drivers/serial/sunsu.c
@@ -1453,8 +1453,10 @@ static int __devinit su_probe(struct of_device *op, const struct of_device_id *m
1453 if (up->su_type == SU_PORT_KBD || up->su_type == SU_PORT_MS) { 1453 if (up->su_type == SU_PORT_KBD || up->su_type == SU_PORT_MS) {
1454 err = sunsu_kbd_ms_init(up); 1454 err = sunsu_kbd_ms_init(up);
1455 if (err) { 1455 if (err) {
1456 of_iounmap(&op->resource[0],
1457 up->port.membase, up->reg_size);
1456 kfree(up); 1458 kfree(up);
1457 goto out_unmap; 1459 return err;
1458 } 1460 }
1459 dev_set_drvdata(&op->dev, up); 1461 dev_set_drvdata(&op->dev, up);
1460 1462
diff --git a/drivers/video/sunxvr500.c b/drivers/video/sunxvr500.c
index 4cd50497264d..3803745d6eee 100644
--- a/drivers/video/sunxvr500.c
+++ b/drivers/video/sunxvr500.c
@@ -242,11 +242,27 @@ static int __devinit e3d_set_fbinfo(struct e3d_info *ep)
242static int __devinit e3d_pci_register(struct pci_dev *pdev, 242static int __devinit e3d_pci_register(struct pci_dev *pdev,
243 const struct pci_device_id *ent) 243 const struct pci_device_id *ent)
244{ 244{
245 struct device_node *of_node;
246 const char *device_type;
245 struct fb_info *info; 247 struct fb_info *info;
246 struct e3d_info *ep; 248 struct e3d_info *ep;
247 unsigned int line_length; 249 unsigned int line_length;
248 int err; 250 int err;
249 251
252 of_node = pci_device_to_OF_node(pdev);
253 if (!of_node) {
254 printk(KERN_ERR "e3d: Cannot find OF node of %s\n",
255 pci_name(pdev));
256 return -ENODEV;
257 }
258
259 device_type = of_get_property(of_node, "device_type", NULL);
260 if (!device_type) {
261 printk(KERN_INFO "e3d: Ignoring secondary output device "
262 "at %s\n", pci_name(pdev));
263 return -ENODEV;
264 }
265
250 err = pci_enable_device(pdev); 266 err = pci_enable_device(pdev);
251 if (err < 0) { 267 if (err < 0) {
252 printk(KERN_ERR "e3d: Cannot enable PCI device %s\n", 268 printk(KERN_ERR "e3d: Cannot enable PCI device %s\n",
@@ -265,13 +281,7 @@ static int __devinit e3d_pci_register(struct pci_dev *pdev,
265 ep->info = info; 281 ep->info = info;
266 ep->pdev = pdev; 282 ep->pdev = pdev;
267 spin_lock_init(&ep->lock); 283 spin_lock_init(&ep->lock);
268 ep->of_node = pci_device_to_OF_node(pdev); 284 ep->of_node = of_node;
269 if (!ep->of_node) {
270 printk(KERN_ERR "e3d: Cannot find OF node of %s\n",
271 pci_name(pdev));
272 err = -ENODEV;
273 goto err_release_fb;
274 }
275 285
276 /* Read the PCI base register of the frame buffer, which we 286 /* Read the PCI base register of the frame buffer, which we
277 * need in order to interpret the RAMDAC_VID_*FB* values in 287 * need in order to interpret the RAMDAC_VID_*FB* values in