diff options
Diffstat (limited to 'drivers/video/sunxvr500.c')
| -rw-r--r-- | drivers/video/sunxvr500.c | 25 | 
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/video/sunxvr500.c b/drivers/video/sunxvr500.c index 4cd50497264..b9c2b948d34 100644 --- a/drivers/video/sunxvr500.c +++ b/drivers/video/sunxvr500.c @@ -5,7 +5,6 @@  #include <linux/module.h>  #include <linux/kernel.h> -#include <linux/slab.h>  #include <linux/fb.h>  #include <linux/pci.h>  #include <linux/init.h> @@ -242,11 +241,27 @@ static int __devinit e3d_set_fbinfo(struct e3d_info *ep)  static int __devinit e3d_pci_register(struct pci_dev *pdev,  				      const struct pci_device_id *ent)  { +	struct device_node *of_node; +	const char *device_type;  	struct fb_info *info;  	struct e3d_info *ep;  	unsigned int line_length;  	int err; +	of_node = pci_device_to_OF_node(pdev); +	if (!of_node) { +		printk(KERN_ERR "e3d: Cannot find OF node of %s\n", +		       pci_name(pdev)); +		return -ENODEV; +	} + +	device_type = of_get_property(of_node, "device_type", NULL); +	if (!device_type) { +		printk(KERN_INFO "e3d: Ignoring secondary output device " +		       "at %s\n", pci_name(pdev)); +		return -ENODEV; +	} +  	err = pci_enable_device(pdev);  	if (err < 0) {  		printk(KERN_ERR "e3d: Cannot enable PCI device %s\n", @@ -265,13 +280,7 @@ static int __devinit e3d_pci_register(struct pci_dev *pdev,  	ep->info = info;  	ep->pdev = pdev;  	spin_lock_init(&ep->lock); -	ep->of_node = pci_device_to_OF_node(pdev); -	if (!ep->of_node) { -		printk(KERN_ERR "e3d: Cannot find OF node of %s\n", -		       pci_name(pdev)); -		err = -ENODEV; -		goto err_release_fb; -	} +	ep->of_node = of_node;  	/* Read the PCI base register of the frame buffer, which we  	 * need in order to interpret the RAMDAC_VID_*FB* values in  |