static int marubl_get_intensity(struct backlight_device *bd)
{
return marubl_device->brightness;
- // return marubl_device->brightness = (unsigned int)readl(marubl_device->marubl_mmreg);
}
static int marubl_send_intensity(struct backlight_device *bd)
intensity = 0;
off = 1;
}
-// if (bd->props.state & GENERICBL_BATTLOW)
-// intensity &= bl_machinfo->limit_mask;
writel(intensity, marubl_device->marubl_mmreg);
writel(off, marubl_device->marubl_mmreg + 0x04);
marubl_device = kmalloc(sizeof(struct marubl), GFP_KERNEL);
if (marubl_device == NULL) {
printk(KERN_ERR "marubl: kmalloc() is failed.\n");
- return -1;
+ return -ENOMEM;
}
memset(marubl_device, 0, sizeof(struct marubl));
- if ((ret = pci_enable_device(pci_dev)) < 0) {
+ ret = pci_enable_device(pci_dev);
+ if (ret < 0) {
printk(KERN_ERR "marubl: pci_enable_device is failed.\n");
- goto outnotdev;
+ kfree(marubl_device);
+ marubl_device = NULL;
+ return ret;
}
ret = -EIO;
-
+
/* 1 : IORESOURCE_MEM */
- if (!request_mem_region(marubl_device->reg_start = pci_resource_start(pci_dev, 1),
- marubl_device->reg_size = pci_resource_len(pci_dev, 1),
- MARUBL_DRIVER_NAME)) {
- goto outnotdev;
+ marubl_device->reg_start = pci_resource_start(pci_dev, 1);
+ marubl_device->reg_size = pci_resource_len(pci_dev, 1);
+ if (!request_mem_region(marubl_device->reg_start,
+ marubl_device->reg_size,
+ MARUBL_DRIVER_NAME)) {
+ pci_disable_device(pci_dev);
+ kfree(marubl_device);
+ marubl_device = NULL;
+ return ret;
}
/* memory areas mapped kernel space */
marubl_device->marubl_mmreg = ioremap(marubl_device->reg_start, marubl_device->reg_size);
if (!marubl_device->marubl_mmreg) {
- goto outnotdev;
+ release_mem_region(marubl_device->reg_start, marubl_device->reg_size);
+ pci_disable_device(pci_dev);
+ kfree(marubl_device);
+ marubl_device = NULL;
+ return ret;
}
- //pci_write_config_byte(pci_dev, PCI_CACHE_LINE_SIZE, 8);
pci_write_config_byte(pci_dev, PCI_LATENCY_TIMER, 64);
pci_set_master(pci_dev);
props.max_brightness = max_brightness;
props.type = BACKLIGHT_PLATFORM;
bd = backlight_device_register ("emulator", &pci_dev->dev, NULL, &marubl_ops, &props);
- if (IS_ERR (bd)) {
- ret = PTR_ERR (bd);
- goto outnotdev;
+ if (IS_ERR(bd)) {
+ ret = PTR_ERR(bd);
+ iounmap(marubl_device->marubl_mmreg);
+ release_mem_region(marubl_device->reg_start, marubl_device->reg_size);
+ pci_disable_device(pci_dev);
+ kfree(marubl_device);
+ marubl_device = NULL;
+ return ret;
}
bd->props.brightness = (unsigned int)readl(marubl_device->marubl_mmreg);;
printk(KERN_INFO "marubl: MARU Virtual Backlight driver.\n");
return 0;
-
-outnotdev:
- if (marubl_device->marubl_mmreg)
- iounmap(marubl_device->marubl_mmreg);
- kfree(marubl_device);
- return ret;
}
static void __devexit marubl_exit(struct pci_dev *pcidev)
* Unregister pci device & delete device
*/
iounmap(marubl_device->marubl_mmreg);
+ release_mem_region(marubl_device->reg_start, marubl_device->reg_size);
pci_disable_device(pcidev);
kfree(marubl_device);
+ marubl_device = NULL;
}
/*