void show_regs_common(void) { const char *vendor, *product, *board; vendor = dmi_get_system_info(DMI_SYS_VENDOR); if (!vendor) vendor = ""; product = dmi_get_system_info(DMI_PRODUCT_NAME); if (!product) product = ""; /* Board Name is optional */ board = dmi_get_system_info(DMI_BOARD_NAME); printk(KERN_CONT "\n"); printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s", task_pid_nr(current), current->comm, print_tainted(), init_utsname()->release, (int)strcspn(init_utsname()->version, " "), init_utsname()->version); printk(KERN_CONT " %s %s", vendor, product); if (board) printk(KERN_CONT "/%s", board); printk(KERN_CONT "\n"); }
static int __init gpio_apu2_init (void) { int err; const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR); const char *board_name = dmi_get_system_info(DMI_BOARD_NAME); /* Match the device name/model */ if (!board_name || !board_vendor || strcasecmp(board_vendor, "PC Engines") || strcasecmp(board_name, "apu2")) { err = -ENODEV; goto exit; } pr_info ("%s: load APU2/LED GPIO driver module\n", DEVNAME); err = platform_driver_register (&gpio_apu2_driver); if (err) goto exit; gpio_apu2_platform_device = platform_device_register_simple (DEVNAME, -1, NULL, 0); if (IS_ERR(gpio_apu2_platform_device)) { err = PTR_ERR(gpio_apu2_platform_device); goto exit_driver; } pr_info ("%s: APU2 GPIO/LED driver module loaded\n", DEVNAME); register_leds_gpio(-1, ARRAY_SIZE(apu2_leds_gpio), apu2_leds_gpio); register_gpio_keys_polled(-1, 20, ARRAY_SIZE(apu2_gpio_keys), apu2_gpio_keys); return 0; exit_driver: platform_driver_unregister (&gpio_apu2_driver); exit: return err; }
static void detect_tablet_mode(struct platform_device *device) { const char *chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE); struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev); acpi_handle handle = ACPI_HANDLE(&device->dev); struct acpi_buffer vgbs_output = { ACPI_ALLOCATE_BUFFER, NULL }; union acpi_object *obj; acpi_status status; int m; if (!(chassis_type && strcmp(chassis_type, "31") == 0)) goto out; status = acpi_evaluate_object(handle, "VGBS", NULL, &vgbs_output); if (ACPI_FAILURE(status)) goto out; obj = vgbs_output.pointer; if (!(obj && obj->type == ACPI_TYPE_INTEGER)) goto out; m = !(obj->integer.value & TABLET_MODE_FLAG); input_report_switch(priv->input_dev, SW_TABLET_MODE, m); m = (obj->integer.value & DOCK_MODE_FLAG) ? 1 : 0; input_report_switch(priv->input_dev, SW_DOCK, m); out: kfree(vgbs_output.pointer); }
static bool __init alix_present_dmi(void) { const char *vendor, *product; vendor = dmi_get_system_info(DMI_SYS_VENDOR); if (!vendor || strcmp(vendor, "PC Engines")) return false; product = dmi_get_system_info(DMI_PRODUCT_NAME); if (!product || (strcmp(product, "ALIX.2D") && strcmp(product, "ALIX.6"))) return false; printk(KERN_INFO "%s: system is recognized as \"%s %s\"\n", KBUILD_MODNAME, vendor, product); return true; }
static int __init abituguru_init(void) { int address, err; struct resource res = { .flags = IORESOURCE_IO }; #ifdef CONFIG_DMI const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR); if (!force && (!board_vendor || strcmp(board_vendor, "http://www.abit.com.tw/"))) return -ENODEV; #endif address = abituguru_detect(); if (address < 0) return address; err = platform_driver_register(&abituguru_driver); if (err) goto exit; abituguru_pdev = platform_device_alloc(ABIT_UGURU_NAME, address); if (!abituguru_pdev) { printk(KERN_ERR ABIT_UGURU_NAME ": Device allocation failed\n"); err = -ENOMEM; goto exit_driver_unregister; } res.start = address; res.end = address + ABIT_UGURU_REGION_LENGTH - 1; res.name = ABIT_UGURU_NAME; err = platform_device_add_resources(abituguru_pdev, &res, 1); if (err) { printk(KERN_ERR ABIT_UGURU_NAME ": Device resource addition failed (%d)\n", err); goto exit_device_put; } err = platform_device_add(abituguru_pdev); if (err) { printk(KERN_ERR ABIT_UGURU_NAME ": Device addition failed (%d)\n", err); goto exit_device_put; } return 0; exit_device_put: platform_device_put(abituguru_pdev); exit_driver_unregister: platform_driver_unregister(&abituguru_driver); exit: return err; }
static int __init fitpc2_wdt_init(void) { int err; if (strcmp("SBC-FITPC2", dmi_get_system_info(DMI_BOARD_NAME))) { pr_info("board name is: %s. Should be SBC-FITPC2\n", dmi_get_system_info(DMI_BOARD_NAME)); return -ENODEV; } if (!request_region(COMMAND_PORT, 1, WATCHDOG_NAME)) { pr_err("I/O address 0x%04x already in use\n", COMMAND_PORT); return -EIO; } if (!request_region(DATA_PORT, 1, WATCHDOG_NAME)) { pr_err("I/O address 0x%04x already in use\n", DATA_PORT); err = -EIO; goto err_data_port; } if (margin < 31 || margin > 255) { pr_err("margin must be in range 31 - 255" " seconds, you tried to set %d\n", margin); err = -EINVAL; goto err_margin; } err = misc_register(&fitpc2_wdt_miscdev); if (err) { pr_err("cannot register miscdev on minor=%d (err=%d)\n", WATCHDOG_MINOR, err); goto err_margin; } return 0; err_margin: release_region(DATA_PORT, 1); err_data_port: release_region(COMMAND_PORT, 1); return err; }
static void __init dmi_dump_ids(void) { const char *board; /* Board Name is optional */ printk(KERN_DEBUG "DMI: "); print_filtered(dmi_get_system_info(DMI_SYS_VENDOR)); printk(KERN_CONT " "); print_filtered(dmi_get_system_info(DMI_PRODUCT_NAME)); board = dmi_get_system_info(DMI_BOARD_NAME); if (board) { printk(KERN_CONT "/"); print_filtered(board); } printk(KERN_CONT ", BIOS "); print_filtered(dmi_get_system_info(DMI_BIOS_VERSION)); printk(KERN_CONT " "); print_filtered(dmi_get_system_info(DMI_BIOS_DATE)); printk(KERN_CONT "\n"); }
/* * This function identifies the systems that have installed the SN65LVPE502CP * USB3.0 re-driver and that need the Compliance Mode Quirk. * Systems: * Vendor: Hewlett-Packard -> System Models: Z420, Z620 and Z820 */ static bool xhci_compliance_mode_recovery_timer_quirk_check(void) { const char *dmi_product_name, *dmi_sys_vendor; dmi_product_name = dmi_get_system_info(DMI_PRODUCT_NAME); dmi_sys_vendor = dmi_get_system_info(DMI_SYS_VENDOR); if (!dmi_product_name || !dmi_sys_vendor) return false; if (!(strstr(dmi_sys_vendor, "Hewlett-Packard"))) return false; if (strstr(dmi_product_name, "Z420") || strstr(dmi_product_name, "Z620") || strstr(dmi_product_name, "Z820") || strstr(dmi_product_name, "Z1 Workstation")) return true; return false; }
static void __devinit asus_dmi_check(void) { const char *model; model = dmi_get_system_info(DMI_PRODUCT_NAME); if (!model) return; if (strncmp(model, "L1400B", 6) == 0) { wlan_status = -1; } }
static void __devinit asus_dmi_check(void) { const char *model; model = dmi_get_system_info(DMI_PRODUCT_NAME); if (!model) return; /* On L1400B WLED control the sound card, don't mess with it ... */ if (strncmp(model, "L1400B", 6) == 0) { wlan_status = -1; } }
static void __init dmi_format_ids(char *buf, size_t len) { int c = 0; const char *board; /* Board Name is optional */ c += print_filtered(buf + c, len - c, dmi_get_system_info(DMI_SYS_VENDOR)); c += scnprintf(buf + c, len - c, " "); c += print_filtered(buf + c, len - c, dmi_get_system_info(DMI_PRODUCT_NAME)); board = dmi_get_system_info(DMI_BOARD_NAME); if (board) { c += scnprintf(buf + c, len - c, "/"); c += print_filtered(buf + c, len - c, board); } c += scnprintf(buf + c, len - c, ", BIOS "); c += print_filtered(buf + c, len - c, dmi_get_system_info(DMI_BIOS_VERSION)); c += scnprintf(buf + c, len - c, " "); c += print_filtered(buf + c, len - c, dmi_get_system_info(DMI_BIOS_DATE)); }
static int __init fitpc2_wdt_init(void) { int err; const char *brd_name; brd_name = dmi_get_system_info(DMI_BOARD_NAME); if (!brd_name || !strstr(brd_name, "SBC-FITPC2")) return -ENODEV; pr_info("%s found\n", brd_name); if (!request_region(COMMAND_PORT, 1, WATCHDOG_NAME)) { pr_err("I/O address 0x%04x already in use\n", COMMAND_PORT); return -EIO; } if (!request_region(DATA_PORT, 1, WATCHDOG_NAME)) { pr_err("I/O address 0x%04x already in use\n", DATA_PORT); err = -EIO; goto err_data_port; } if (margin < 31 || margin > 255) { pr_err("margin must be in range 31 - 255 seconds, you tried to set %d\n", margin); err = -EINVAL; goto err_margin; } err = misc_register(&fitpc2_wdt_miscdev); if (err) { pr_err("cannot register miscdev on minor=%d (err=%d)\n", WATCHDOG_MINOR, err); goto err_margin; } return 0; err_margin: release_region(DATA_PORT, 1); err_data_port: release_region(COMMAND_PORT, 1); return err; }
static int stmmac_pci_find_phy_addr(struct stmmac_pci_info *info) { const char *name = dmi_get_system_info(DMI_BOARD_NAME); unsigned int func = PCI_FUNC(info->pdev->devfn); struct stmmac_pci_dmi_data *dmi; /* * Galileo boards with old firmware don't support DMI. We always return * 1 here, so at least first found MAC controller would be probed. */ if (!name) return 1; for (dmi = info->dmi; dmi->name && *dmi->name; dmi++) { if (!strcmp(dmi->name, name) && dmi->func == func) return dmi->phy_addr; } return -ENODEV; }
static int uhci_pci_global_suspend_mode_is_broken(struct uhci_hcd *uhci) { int port; const char *sys_info; static const char bad_Asus_board[] = "A7V8X"; /* One of Asus's motherboards has a bug which causes it to * wake up immediately from suspend-to-RAM if any of the ports * are connected. In such cases we will not set EGSM. */ sys_info = dmi_get_system_info(DMI_BOARD_NAME); if (sys_info && !strcmp(sys_info, bad_Asus_board)) { for (port = 0; port < uhci->rh_numports; ++port) { if (inw(uhci->io_addr + USBPORTSC1 + port * 2) & USBPORTSC_CCS) return 1; } } return 0; }
static void eeepc_dmi_check(struct asus_wmi_driver *driver) { const char *model; model = dmi_get_system_info(DMI_PRODUCT_NAME); if (!model) return; /* * Whitelist for wlan hotplug * * Asus 1000H needs the current hotplug code to handle * Fn+F2 correctly. We may add other Asus here later, but * it seems that most of the laptops supported by asus-wmi * don't need to be on this list */ if (strcmp(model, "1000H") == 0) { driver->hotplug_wireless = true; pr_info("wlan hotplug enabled\n"); } }
static int quark_default_data(struct pci_dev *pdev, struct plat_stmmacenet_data *plat) { int ret; /* Set common default data first */ common_default_data(plat); /* * Refuse to load the driver and register net device if MAC controller * does not connect to any PHY interface. */ ret = stmmac_pci_find_phy_addr(pdev, quark_pci_dmi); if (ret < 0) { /* Return error to the caller on DMI enabled boards. */ if (dmi_get_system_info(DMI_BOARD_NAME)) return ret; /* * Galileo boards with old firmware don't support DMI. We always * use 1 here as PHY address, so at least the first found MAC * controller would be probed. */ ret = 1; } plat->bus_id = pci_dev_id(pdev); plat->phy_addr = ret; plat->interface = PHY_INTERFACE_MODE_RMII; plat->dma_cfg->pbl = 16; plat->dma_cfg->pblx8 = true; plat->dma_cfg->fixed_burst = 1; /* AXI (TODO) */ return 0; }
static int pch_phub_probe(struct pci_dev *pdev, const struct pci_device_id *id) { int ret; struct pch_phub_reg *chip; chip = kzalloc(sizeof(struct pch_phub_reg), GFP_KERNEL); if (chip == NULL) return -ENOMEM; ret = pci_enable_device(pdev); if (ret) { dev_err(&pdev->dev, "%s : pci_enable_device FAILED(ret=%d)", __func__, ret); goto err_pci_enable_dev; } dev_dbg(&pdev->dev, "%s : pci_enable_device returns %d\n", __func__, ret); ret = pci_request_regions(pdev, KBUILD_MODNAME); if (ret) { dev_err(&pdev->dev, "%s : pci_request_regions FAILED(ret=%d)", __func__, ret); goto err_req_regions; } dev_dbg(&pdev->dev, "%s : " "pci_request_regions returns %d\n", __func__, ret); chip->pch_phub_base_address = pci_iomap(pdev, 1, 0); if (chip->pch_phub_base_address == NULL) { dev_err(&pdev->dev, "%s : pci_iomap FAILED", __func__); ret = -ENOMEM; goto err_pci_iomap; } dev_dbg(&pdev->dev, "%s : pci_iomap SUCCESS and value " "in pch_phub_base_address variable is %p\n", __func__, chip->pch_phub_base_address); chip->pdev = pdev; /* Save pci device struct */ if (id->driver_data == 1) { /* EG20T PCH */ const char *board_name; ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); if (ret) goto err_sysfs_create; ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto exit_bin_attr; pch_phub_read_modify_write_reg(chip, (unsigned int)CLKCFG_REG_OFFSET, CLKCFG_CAN_50MHZ, CLKCFG_CANCLK_MASK); /* quirk for CM-iTC board */ board_name = dmi_get_system_info(DMI_BOARD_NAME); if (board_name && strstr(board_name, "CM-iTC")) pch_phub_read_modify_write_reg(chip, (unsigned int)CLKCFG_REG_OFFSET, CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV | CLKCFG_PLL2VCO | CLKCFG_UARTCLKSEL, CLKCFG_UART_MASK); /* set the prefech value */ iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */ iowrite32(0x25, chip->pch_phub_base_address + 0x44); chip->pch_opt_rom_start_address = PCH_PHUB_ROM_START_ADDR_EG20T; chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_EG20T; } else if (id->driver_data == 2) { /* ML7213 IOH */ ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto err_sysfs_create; /* set the prefech value * Device2(USB OHCI #1/ USB EHCI #1/ USB Device):a * Device4(SDIO #0,1,2):f * Device6(SATA 2):f * Device8(USB OHCI #0/ USB EHCI #0):a */ iowrite32(0x000affa0, chip->pch_phub_base_address + 0x14); chip->pch_opt_rom_start_address =\ PCH_PHUB_ROM_START_ADDR_ML7213; } else if (id->driver_data == 3) { /* ML7223 IOH Bus-m*/ /* set the prefech value * Device8(GbE) */ iowrite32(0x000a0000, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */ iowrite32(0x25, chip->pch_phub_base_address + 0x140); chip->pch_opt_rom_start_address =\ PCH_PHUB_ROM_START_ADDR_ML7223; chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223; } else if (id->driver_data == 4) { /* ML7223 IOH Bus-n*/ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); if (ret) goto err_sysfs_create; ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto exit_bin_attr; /* set the prefech value * Device2(USB OHCI #0,1,2,3/ USB EHCI #0):a * Device4(SDIO #0,1):f * Device6(SATA 2):f */ iowrite32(0x0000ffa0, chip->pch_phub_base_address + 0x14); chip->pch_opt_rom_start_address =\ PCH_PHUB_ROM_START_ADDR_ML7223; chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223; } else if (id->driver_data == 5) { /* ML7831 */ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); if (ret) goto err_sysfs_create; ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto exit_bin_attr; /* set the prefech value */ iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */ iowrite32(0x25, chip->pch_phub_base_address + 0x44); chip->pch_opt_rom_start_address = PCH_PHUB_ROM_START_ADDR_EG20T; chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_EG20T; } chip->ioh_type = id->driver_data; pci_set_drvdata(pdev, chip); return 0; exit_bin_attr: sysfs_remove_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); err_sysfs_create: pci_iounmap(pdev, chip->pch_phub_base_address); err_pci_iomap: pci_release_regions(pdev); err_req_regions: pci_disable_device(pdev); err_pci_enable_dev: kfree(chip); dev_err(&pdev->dev, "%s returns %d\n", __func__, ret); return ret; }
static int __devinit pch_phub_probe(struct pci_dev *pdev, const struct pci_device_id *id) { int retval; int ret; ssize_t rom_size; struct pch_phub_reg *chip; chip = kzalloc(sizeof(struct pch_phub_reg), GFP_KERNEL); if (chip == NULL) return -ENOMEM; ret = pci_enable_device(pdev); if (ret) { dev_err(&pdev->dev, "%s : pci_enable_device FAILED(ret=%d)", __func__, ret); goto err_pci_enable_dev; } dev_dbg(&pdev->dev, "%s : pci_enable_device returns %d\n", __func__, ret); ret = pci_request_regions(pdev, KBUILD_MODNAME); if (ret) { dev_err(&pdev->dev, "%s : pci_request_regions FAILED(ret=%d)", __func__, ret); goto err_req_regions; } dev_dbg(&pdev->dev, "%s : " "pci_request_regions returns %d\n", __func__, ret); chip->pch_phub_base_address = pci_iomap(pdev, 1, 0); if (chip->pch_phub_base_address == 0) { dev_err(&pdev->dev, "%s : pci_iomap FAILED", __func__); ret = -ENOMEM; goto err_pci_iomap; } dev_dbg(&pdev->dev, "%s : pci_iomap SUCCESS and value " "in pch_phub_base_address variable is %p\n", __func__, chip->pch_phub_base_address); chip->pch_phub_extrom_base_address = pci_map_rom(pdev, &rom_size); if (chip->pch_phub_extrom_base_address == 0) { dev_err(&pdev->dev, "%s : pci_map_rom FAILED", __func__); ret = -ENOMEM; goto err_pci_map; } dev_dbg(&pdev->dev, "%s : " "pci_map_rom SUCCESS and value in " "pch_phub_extrom_base_address variable is %p\n", __func__, chip->pch_phub_extrom_base_address); if (id->driver_data == 1) { retval = sysfs_create_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); if (retval) goto err_sysfs_create; retval = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (retval) goto exit_bin_attr; pch_phub_read_modify_write_reg(chip, (unsigned int)CLKCFG_REG_OFFSET, CLKCFG_CAN_50MHZ, CLKCFG_CANCLK_MASK); /* quirk for CM-iTC board */ if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC")) pch_phub_read_modify_write_reg(chip, (unsigned int)CLKCFG_REG_OFFSET, CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV | CLKCFG_PLL2VCO | CLKCFG_UARTCLKSEL, CLKCFG_UART_MASK); /* set the prefech value */ iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14); /* set the interrupt delay value */ iowrite32(0x25, chip->pch_phub_base_address + 0x44); } else if (id->driver_data == 2) { retval = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (retval) goto err_sysfs_create; /* set the prefech value * Device2(USB OHCI #1/ USB EHCI #1/ USB Device):a * Device4(SDIO #0,1,2):f * Device6(SATA 2):f * Device8(USB OHCI #0/ USB EHCI #0):a */ iowrite32(0x000affa0, chip->pch_phub_base_address + 0x14); } pci_set_drvdata(pdev, chip); return 0; exit_bin_attr: sysfs_remove_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); err_sysfs_create: pci_unmap_rom(pdev, chip->pch_phub_extrom_base_address); err_pci_map: pci_iounmap(pdev, chip->pch_phub_base_address); err_pci_iomap: pci_release_regions(pdev); err_req_regions: pci_disable_device(pdev); err_pci_enable_dev: kfree(chip); dev_err(&pdev->dev, "%s returns %d\n", __func__, ret); return ret; }
void __show_regs(struct pt_regs *regs, int all) { unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L; unsigned long d0, d1, d2, d3, d6, d7; unsigned long sp; unsigned short ss, gs; const char *board; if (user_mode_vm(regs)) { sp = regs->sp; ss = regs->ss & 0xffff; gs = get_user_gs(regs); } else { sp = (unsigned long) (®s->sp); savesegment(ss, ss); savesegment(gs, gs); } printk("\n"); board = dmi_get_system_info(DMI_PRODUCT_NAME); if (!board) board = ""; printk("Pid: %d, comm: %s %s (%s %.*s) %s\n", task_pid_nr(current), current->comm, print_tainted(), init_utsname()->release, (int)strcspn(init_utsname()->version, " "), init_utsname()->version, board); printk("EIP: %04x:[<%08lx>] EFLAGS: %08lx CPU: %d\n", (u16)regs->cs, regs->ip, regs->flags, smp_processor_id()); print_symbol("EIP is at %s\n", regs->ip); printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n", regs->ax, regs->bx, regs->cx, regs->dx); printk("ESI: %08lx EDI: %08lx EBP: %08lx ESP: %08lx\n", regs->si, regs->di, regs->bp, sp); printk(" DS: %04x ES: %04x FS: %04x GS: %04x SS: %04x\n", (u16)regs->ds, (u16)regs->es, (u16)regs->fs, gs, ss); if (!all) return; cr0 = read_cr0(); cr2 = read_cr2(); cr3 = read_cr3(); cr4 = read_cr4_safe(); printk("CR0: %08lx CR2: %08lx CR3: %08lx CR4: %08lx\n", cr0, cr2, cr3, cr4); get_debugreg(d0, 0); get_debugreg(d1, 1); get_debugreg(d2, 2); get_debugreg(d3, 3); printk("DR0: %08lx DR1: %08lx DR2: %08lx DR3: %08lx\n", d0, d1, d2, d3); get_debugreg(d6, 6); get_debugreg(d7, 7); printk("DR6: %08lx DR7: %08lx\n", d6, d7); }
int fthd_isp_cmd_set_loadfile(struct fthd_private *dev_priv) { struct isp_cmd_set_loadfile cmd; struct isp_mem_obj *file; const struct firmware *fw; const char *filename = NULL; const char *vendor, *board; int ret = 0; pr_debug("set loadfile\n"); vendor = dmi_get_system_info(DMI_BOARD_VENDOR); board = dmi_get_system_info(DMI_BOARD_NAME); memset(&cmd, 0, sizeof(cmd)); switch(dev_priv->sensor_id1) { case 0x164: filename = "facetimehd/8221_01XX.dat"; break; case 0x190: filename = "facetimehd/1222_01XX.dat"; break; case 0x8830: filename = "facetimehd/9112_01XX.dat"; break; case 0x9770: if (vendor && board && !strcmp(vendor, "Apple Inc.") && !strncmp(board, "MacBookAir", sizeof("MacBookAir")-1)) { filename = "facetimehd/1771_01XX.dat"; break; } switch(dev_priv->sensor_id0) { case 4: filename = "facetimehd/1874_01XX.dat"; break; default: filename = "facetimehd/1871_01XX.dat"; break; } break; case 0x9774: switch(dev_priv->sensor_id0) { case 4: filename = "facetimehd/1674_01XX.dat"; break; case 5: filename = "facetimehd/1675_01XX.dat"; break; default: filename = "facetimehd/1671_01XX.dat"; break; } break; default: break; } if (!filename) { pr_err("no set file for sensorid %04x %04x found\n", dev_priv->sensor_id0, dev_priv->sensor_id1); return -EINVAL; } /* The set file is allowed to be missing but we don't get calibration */ ret = request_firmware(&fw, filename, &dev_priv->pdev->dev); if (ret) return 0; /* Firmware memory is preallocated at init time */ BUG_ON(dev_priv->set_file); file = isp_mem_create(dev_priv, FTHD_MEM_SET_FILE, fw->size); FTHD_S2_MEMCPY_TOIO(file->offset, fw->data, fw->size); release_firmware(fw); dev_priv->set_file = file; pr_debug("set file: addr %08lx, size %d\n", file->offset, (int)file->size); cmd.addr = file->offset; cmd.length = file->size; return fthd_isp_cmd(dev_priv, CISP_CMD_CH_SET_FILE_LOAD, &cmd, sizeof(cmd), NULL); }