Lines Matching refs:sm
134 static void sm501_dump_clk(struct sm501_devdata *sm) in sm501_dump_clk() argument
136 unsigned long misct = smc501_readl(sm->regs + SM501_MISC_TIMING); in sm501_dump_clk()
137 unsigned long pm0 = smc501_readl(sm->regs + SM501_POWER_MODE_0_CLOCK); in sm501_dump_clk()
138 unsigned long pm1 = smc501_readl(sm->regs + SM501_POWER_MODE_1_CLOCK); in sm501_dump_clk()
139 unsigned long pmc = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL); in sm501_dump_clk()
164 dev_dbg(sm->dev, "MISCT=%08lx, PM0=%08lx, PM1=%08lx\n", in sm501_dump_clk()
167 dev_dbg(sm->dev, "PLL2 = %ld.%ld MHz (%ld), SDCLK0=%08lx, SDCLK1=%08lx\n", in sm501_dump_clk()
170 dev_dbg(sm->dev, "SDRAM: PM0=%ld, PM1=%ld\n", sdclk0, sdclk1); in sm501_dump_clk()
172 dev_dbg(sm->dev, "PM0[%c]: " in sm501_dump_clk()
181 dev_dbg(sm->dev, "PM1[%c]: " in sm501_dump_clk()
191 static void sm501_dump_regs(struct sm501_devdata *sm) in sm501_dump_regs() argument
193 void __iomem *regs = sm->regs; in sm501_dump_regs()
195 dev_info(sm->dev, "System Control %08x\n", in sm501_dump_regs()
197 dev_info(sm->dev, "Misc Control %08x\n", in sm501_dump_regs()
199 dev_info(sm->dev, "GPIO Control Low %08x\n", in sm501_dump_regs()
201 dev_info(sm->dev, "GPIO Control Hi %08x\n", in sm501_dump_regs()
203 dev_info(sm->dev, "DRAM Control %08x\n", in sm501_dump_regs()
205 dev_info(sm->dev, "Arbitration Ctrl %08x\n", in sm501_dump_regs()
207 dev_info(sm->dev, "Misc Timing %08x\n", in sm501_dump_regs()
211 static void sm501_dump_gate(struct sm501_devdata *sm) in sm501_dump_gate() argument
213 dev_info(sm->dev, "CurrentGate %08x\n", in sm501_dump_gate()
214 smc501_readl(sm->regs + SM501_CURRENT_GATE)); in sm501_dump_gate()
215 dev_info(sm->dev, "CurrentClock %08x\n", in sm501_dump_gate()
216 smc501_readl(sm->regs + SM501_CURRENT_CLOCK)); in sm501_dump_gate()
217 dev_info(sm->dev, "PowerModeControl %08x\n", in sm501_dump_gate()
218 smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL)); in sm501_dump_gate()
222 static inline void sm501_dump_gate(struct sm501_devdata *sm) { } in sm501_dump_gate() argument
223 static inline void sm501_dump_regs(struct sm501_devdata *sm) { } in sm501_dump_regs() argument
224 static inline void sm501_dump_clk(struct sm501_devdata *sm) { } in sm501_dump_clk() argument
232 static void sm501_sync_regs(struct sm501_devdata *sm) in sm501_sync_regs() argument
234 smc501_readl(sm->regs); in sm501_sync_regs()
237 static inline void sm501_mdelay(struct sm501_devdata *sm, unsigned int delay) in sm501_mdelay() argument
243 if (sm->in_suspend) in sm501_mdelay()
257 struct sm501_devdata *sm = dev_get_drvdata(dev); in sm501_misc_control() local
262 spin_lock_irqsave(&sm->reg_lock, save); in sm501_misc_control()
264 misc = smc501_readl(sm->regs + SM501_MISC_CONTROL); in sm501_misc_control()
268 smc501_writel(to, sm->regs + SM501_MISC_CONTROL); in sm501_misc_control()
269 sm501_sync_regs(sm); in sm501_misc_control()
271 dev_dbg(sm->dev, "MISC_CONTROL %08lx\n", misc); in sm501_misc_control()
274 spin_unlock_irqrestore(&sm->reg_lock, save); in sm501_misc_control()
291 struct sm501_devdata *sm = dev_get_drvdata(dev); in sm501_modify_reg() local
295 spin_lock_irqsave(&sm->reg_lock, save); in sm501_modify_reg()
297 data = smc501_readl(sm->regs + reg); in sm501_modify_reg()
301 smc501_writel(data, sm->regs + reg); in sm501_modify_reg()
302 sm501_sync_regs(sm); in sm501_modify_reg()
304 spin_unlock_irqrestore(&sm->reg_lock, save); in sm501_modify_reg()
318 struct sm501_devdata *sm = dev_get_drvdata(dev); in sm501_unit_power() local
323 mutex_lock(&sm->clock_lock); in sm501_unit_power()
325 mode = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL); in sm501_unit_power()
326 gate = smc501_readl(sm->regs + SM501_CURRENT_GATE); in sm501_unit_power()
327 clock = smc501_readl(sm->regs + SM501_CURRENT_CLOCK); in sm501_unit_power()
331 if (unit >= ARRAY_SIZE(sm->unit_power)) { in sm501_unit_power()
336 dev_dbg(sm->dev, "%s: unit %d, cur %d, to %d\n", __func__, unit, in sm501_unit_power()
337 sm->unit_power[unit], to); in sm501_unit_power()
339 if (to == 0 && sm->unit_power[unit] == 0) { in sm501_unit_power()
340 dev_err(sm->dev, "unit %d is already shutdown\n", unit); in sm501_unit_power()
344 sm->unit_power[unit] += to ? 1 : -1; in sm501_unit_power()
345 to = sm->unit_power[unit] ? 1 : 0; in sm501_unit_power()
359 smc501_writel(gate, sm->regs + SM501_POWER_MODE_0_GATE); in sm501_unit_power()
360 smc501_writel(clock, sm->regs + SM501_POWER_MODE_0_CLOCK); in sm501_unit_power()
365 smc501_writel(gate, sm->regs + SM501_POWER_MODE_1_GATE); in sm501_unit_power()
366 smc501_writel(clock, sm->regs + SM501_POWER_MODE_1_CLOCK); in sm501_unit_power()
375 smc501_writel(mode, sm->regs + SM501_POWER_MODE_CONTROL); in sm501_unit_power()
376 sm501_sync_regs(sm); in sm501_unit_power()
378 dev_dbg(sm->dev, "gate %08lx, clock %08lx, mode %08lx\n", in sm501_unit_power()
381 sm501_mdelay(sm, 16); in sm501_unit_power()
384 mutex_unlock(&sm->clock_lock); in sm501_unit_power()
513 struct sm501_devdata *sm = dev_get_drvdata(dev); in sm501_set_clock() local
514 unsigned long mode = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL); in sm501_set_clock()
515 unsigned long gate = smc501_readl(sm->regs + SM501_CURRENT_GATE); in sm501_set_clock()
516 unsigned long clock = smc501_readl(sm->regs + SM501_CURRENT_CLOCK); in sm501_set_clock()
533 if (sm->rev >= 0xC0) { in sm501_set_clock()
585 mutex_lock(&sm->clock_lock); in sm501_set_clock()
587 mode = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL); in sm501_set_clock()
588 gate = smc501_readl(sm->regs + SM501_CURRENT_GATE); in sm501_set_clock()
589 clock = smc501_readl(sm->regs + SM501_CURRENT_CLOCK); in sm501_set_clock()
598 smc501_writel(gate, sm->regs + SM501_POWER_MODE_0_GATE); in sm501_set_clock()
599 smc501_writel(clock, sm->regs + SM501_POWER_MODE_0_CLOCK); in sm501_set_clock()
604 smc501_writel(gate, sm->regs + SM501_POWER_MODE_1_GATE); in sm501_set_clock()
605 smc501_writel(clock, sm->regs + SM501_POWER_MODE_1_CLOCK); in sm501_set_clock()
610 mutex_unlock(&sm->clock_lock); in sm501_set_clock()
614 smc501_writel(mode, sm->regs + SM501_POWER_MODE_CONTROL); in sm501_set_clock()
618 sm->regs + SM501_PROGRAMMABLE_PLL_CONTROL); in sm501_set_clock()
620 sm501_sync_regs(sm); in sm501_set_clock()
622 dev_dbg(sm->dev, "gate %08lx, clock %08lx, mode %08lx\n", in sm501_set_clock()
625 sm501_mdelay(sm, 16); in sm501_set_clock()
626 mutex_unlock(&sm->clock_lock); in sm501_set_clock()
628 sm501_dump_clk(sm); in sm501_set_clock()
644 struct sm501_devdata *sm = dev_get_drvdata(dev); in sm501_find_clock() local
650 if (sm->rev >= 0xC0) { in sm501_find_clock()
701 sm501_create_subdev(struct sm501_devdata *sm, char *name, in sm501_create_subdev() argument
715 smdev->pdev.id = sm->pdev_id; in sm501_create_subdev()
716 smdev->pdev.dev.parent = sm->dev; in sm501_create_subdev()
733 static int sm501_register_device(struct sm501_devdata *sm, in sm501_register_device() argument
748 dev_dbg(sm->dev, "registered %s\n", pdev->name); in sm501_register_device()
749 list_add_tail(&smdev->list, &sm->devices); in sm501_register_device()
751 dev_err(sm->dev, "error registering %s (%d)\n", in sm501_register_device()
762 static void sm501_create_subio(struct sm501_devdata *sm, in sm501_create_subio() argument
768 res->parent = sm->io_res; in sm501_create_subio()
769 res->start = sm->io_res->start + offs; in sm501_create_subio()
778 static void sm501_create_mem(struct sm501_devdata *sm, in sm501_create_mem() argument
786 res->parent = sm->mem_res; in sm501_create_mem()
787 res->start = sm->mem_res->start + *offs; in sm501_create_mem()
796 static void sm501_create_irq(struct sm501_devdata *sm, in sm501_create_irq() argument
801 res->start = res->end = sm->irq; in sm501_create_irq()
804 static int sm501_register_usbhost(struct sm501_devdata *sm, in sm501_register_usbhost() argument
809 pdev = sm501_create_subdev(sm, "sm501-usb", 3, 0); in sm501_register_usbhost()
813 sm501_create_subio(sm, &pdev->resource[0], 0x40000, 0x20000); in sm501_register_usbhost()
814 sm501_create_mem(sm, &pdev->resource[1], mem_avail, 256*1024); in sm501_register_usbhost()
815 sm501_create_irq(sm, &pdev->resource[2]); in sm501_register_usbhost()
817 return sm501_register_device(sm, pdev); in sm501_register_usbhost()
820 static void sm501_setup_uart_data(struct sm501_devdata *sm, in sm501_setup_uart_data() argument
824 uart_data->membase = sm->regs + offset; in sm501_setup_uart_data()
825 uart_data->mapbase = sm->io_res->start + offset; in sm501_setup_uart_data()
827 uart_data->irq = sm->irq; in sm501_setup_uart_data()
833 static int sm501_register_uart(struct sm501_devdata *sm, int devices) in sm501_register_uart() argument
838 pdev = sm501_create_subdev(sm, "serial8250", 0, in sm501_register_uart()
846 sm501_setup_uart_data(sm, uart_data++, 0x30000); in sm501_register_uart()
847 sm501_unit_power(sm->dev, SM501_GATE_UART0, 1); in sm501_register_uart()
848 sm501_modify_reg(sm->dev, SM501_IRQ_MASK, 1 << 12, 0); in sm501_register_uart()
849 sm501_modify_reg(sm->dev, SM501_GPIO63_32_CONTROL, 0x01e0, 0); in sm501_register_uart()
852 sm501_setup_uart_data(sm, uart_data++, 0x30020); in sm501_register_uart()
853 sm501_unit_power(sm->dev, SM501_GATE_UART1, 1); in sm501_register_uart()
854 sm501_modify_reg(sm->dev, SM501_IRQ_MASK, 1 << 13, 0); in sm501_register_uart()
855 sm501_modify_reg(sm->dev, SM501_GPIO63_32_CONTROL, 0x1e00, 0); in sm501_register_uart()
860 return sm501_register_device(sm, pdev); in sm501_register_uart()
863 static int sm501_register_display(struct sm501_devdata *sm, in sm501_register_display() argument
868 pdev = sm501_create_subdev(sm, "sm501-fb", 4, 0); in sm501_register_display()
872 sm501_create_subio(sm, &pdev->resource[0], 0x80000, 0x10000); in sm501_register_display()
873 sm501_create_subio(sm, &pdev->resource[1], 0x100000, 0x50000); in sm501_register_display()
874 sm501_create_mem(sm, &pdev->resource[2], mem_avail, *mem_avail); in sm501_register_display()
875 sm501_create_irq(sm, &pdev->resource[3]); in sm501_register_display()
877 return sm501_register_device(sm, pdev); in sm501_register_display()
1017 static int sm501_gpio_register_chip(struct sm501_devdata *sm, in sm501_gpio_register_chip() argument
1021 struct sm501_platdata *pdata = sm->platdata; in sm501_gpio_register_chip()
1031 chip->control = sm->regs + SM501_GPIO63_32_CONTROL; in sm501_gpio_register_chip()
1035 chip->control = sm->regs + SM501_GPIO31_0_CONTROL; in sm501_gpio_register_chip()
1045 static int sm501_register_gpio(struct sm501_devdata *sm) in sm501_register_gpio() argument
1047 struct sm501_gpio *gpio = &sm->gpio; in sm501_register_gpio()
1048 resource_size_t iobase = sm->io_res->start + SM501_GPIO; in sm501_register_gpio()
1051 dev_dbg(sm->dev, "registering gpio block %08llx\n", in sm501_register_gpio()
1058 dev_err(sm->dev, "gpio: failed to request region\n"); in sm501_register_gpio()
1064 dev_err(sm->dev, "gpio: failed to remap registers\n"); in sm501_register_gpio()
1071 ret = sm501_gpio_register_chip(sm, gpio, &gpio->low); in sm501_register_gpio()
1073 dev_err(sm->dev, "failed to add low chip\n"); in sm501_register_gpio()
1077 ret = sm501_gpio_register_chip(sm, gpio, &gpio->high); in sm501_register_gpio()
1079 dev_err(sm->dev, "failed to add high chip\n"); in sm501_register_gpio()
1100 static void sm501_gpio_remove(struct sm501_devdata *sm) in sm501_gpio_remove() argument
1102 struct sm501_gpio *gpio = &sm->gpio; in sm501_gpio_remove()
1104 if (!sm->gpio.registered) in sm501_gpio_remove()
1115 static inline int sm501_gpio_pin2nr(struct sm501_devdata *sm, unsigned int pin) in sm501_gpio_pin2nr() argument
1117 struct sm501_gpio *gpio = &sm->gpio; in sm501_gpio_pin2nr()
1123 static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) in sm501_gpio_isregistered() argument
1125 return sm->gpio.registered; in sm501_gpio_isregistered()
1128 static inline int sm501_register_gpio(struct sm501_devdata *sm) in sm501_register_gpio() argument
1133 static inline void sm501_gpio_remove(struct sm501_devdata *sm) in sm501_gpio_remove() argument
1137 static inline int sm501_gpio_pin2nr(struct sm501_devdata *sm, unsigned int pin) in sm501_gpio_pin2nr() argument
1142 static inline int sm501_gpio_isregistered(struct sm501_devdata *sm) in sm501_gpio_isregistered() argument
1148 static int sm501_register_gpio_i2c_instance(struct sm501_devdata *sm, in sm501_register_gpio_i2c_instance() argument
1154 pdev = sm501_create_subdev(sm, "i2c-gpio", 0, in sm501_register_gpio_i2c_instance()
1165 icd->sda_pin = sm501_gpio_pin2nr(sm, iic->pin_sda); in sm501_register_gpio_i2c_instance()
1166 icd->scl_pin = sm501_gpio_pin2nr(sm, iic->pin_scl); in sm501_register_gpio_i2c_instance()
1178 dev_info(sm->dev, "registering i2c-%d: sda=%d (%d), scl=%d (%d)\n", in sm501_register_gpio_i2c_instance()
1182 return sm501_register_device(sm, pdev); in sm501_register_gpio_i2c_instance()
1185 static int sm501_register_gpio_i2c(struct sm501_devdata *sm, in sm501_register_gpio_i2c() argument
1193 ret = sm501_register_gpio_i2c_instance(sm, iic); in sm501_register_gpio_i2c()
1209 struct sm501_devdata *sm = dev_get_drvdata(dev) ; in sm501_dbg_regs() local
1216 reg, smc501_readl(sm->regs + reg)); in sm501_dbg_regs()
1234 static inline void sm501_init_reg(struct sm501_devdata *sm, in sm501_init_reg() argument
1240 tmp = smc501_readl(sm->regs + reg); in sm501_init_reg()
1243 smc501_writel(tmp, sm->regs + reg); in sm501_init_reg()
1251 static void sm501_init_regs(struct sm501_devdata *sm, in sm501_init_regs() argument
1254 sm501_misc_control(sm->dev, in sm501_init_regs()
1258 sm501_init_reg(sm, SM501_MISC_TIMING, &init->misc_timing); in sm501_init_regs()
1259 sm501_init_reg(sm, SM501_GPIO31_0_CONTROL, &init->gpio_low); in sm501_init_regs()
1260 sm501_init_reg(sm, SM501_GPIO63_32_CONTROL, &init->gpio_high); in sm501_init_regs()
1263 dev_info(sm->dev, "setting M1XCLK to %ld\n", init->m1xclk); in sm501_init_regs()
1264 sm501_set_clock(sm->dev, SM501_CLOCK_M1XCLK, init->m1xclk); in sm501_init_regs()
1268 dev_info(sm->dev, "setting MCLK to %ld\n", init->mclk); in sm501_init_regs()
1269 sm501_set_clock(sm->dev, SM501_CLOCK_MCLK, init->mclk); in sm501_init_regs()
1282 static int sm501_check_clocks(struct sm501_devdata *sm) in sm501_check_clocks() argument
1284 unsigned long pwrmode = smc501_readl(sm->regs + SM501_CURRENT_CLOCK); in sm501_check_clocks()
1305 static int sm501_init_dev(struct sm501_devdata *sm) in sm501_init_dev() argument
1314 mutex_init(&sm->clock_lock); in sm501_init_dev()
1315 spin_lock_init(&sm->reg_lock); in sm501_init_dev()
1317 INIT_LIST_HEAD(&sm->devices); in sm501_init_dev()
1319 devid = smc501_readl(sm->regs + SM501_DEVICEID); in sm501_init_dev()
1322 dev_err(sm->dev, "incorrect device id %08lx\n", devid); in sm501_init_dev()
1327 smc501_writel(0, sm->regs + SM501_IRQ_MASK); in sm501_init_dev()
1329 dramctrl = smc501_readl(sm->regs + SM501_DRAM_CONTROL); in sm501_init_dev()
1332 dev_info(sm->dev, "SM501 At %p: Version %08lx, %ld Mb, IRQ %d\n", in sm501_init_dev()
1333 sm->regs, devid, (unsigned long)mem_avail >> 20, sm->irq); in sm501_init_dev()
1335 sm->rev = devid & SM501_DEVICEID_REVMASK; in sm501_init_dev()
1337 sm501_dump_gate(sm); in sm501_init_dev()
1339 ret = device_create_file(sm->dev, &dev_attr_dbg_regs); in sm501_init_dev()
1341 dev_err(sm->dev, "failed to create debug regs file\n"); in sm501_init_dev()
1343 sm501_dump_clk(sm); in sm501_init_dev()
1347 pdata = sm->platdata; in sm501_init_dev()
1351 sm501_init_regs(sm, idata); in sm501_init_dev()
1354 sm501_register_usbhost(sm, &mem_avail); in sm501_init_dev()
1356 sm501_register_uart(sm, idata->devices); in sm501_init_dev()
1358 sm501_register_gpio(sm); in sm501_init_dev()
1362 if (!sm501_gpio_isregistered(sm)) in sm501_init_dev()
1363 dev_err(sm->dev, "no gpio available for i2c gpio.\n"); in sm501_init_dev()
1365 sm501_register_gpio_i2c(sm, pdata); in sm501_init_dev()
1368 ret = sm501_check_clocks(sm); in sm501_init_dev()
1370 dev_err(sm->dev, "M1X and M clocks sourced from different " in sm501_init_dev()
1376 sm501_register_display(sm, &mem_avail); in sm501_init_dev()
1383 struct sm501_devdata *sm; in sm501_plat_probe() local
1386 sm = kzalloc(sizeof(struct sm501_devdata), GFP_KERNEL); in sm501_plat_probe()
1387 if (sm == NULL) { in sm501_plat_probe()
1393 sm->dev = &dev->dev; in sm501_plat_probe()
1394 sm->pdev_id = dev->id; in sm501_plat_probe()
1395 sm->platdata = dev_get_platdata(&dev->dev); in sm501_plat_probe()
1402 sm->irq = ret; in sm501_plat_probe()
1404 sm->io_res = platform_get_resource(dev, IORESOURCE_MEM, 1); in sm501_plat_probe()
1405 sm->mem_res = platform_get_resource(dev, IORESOURCE_MEM, 0); in sm501_plat_probe()
1407 if (sm->io_res == NULL || sm->mem_res == NULL) { in sm501_plat_probe()
1413 sm->regs_claim = request_mem_region(sm->io_res->start, in sm501_plat_probe()
1416 if (sm->regs_claim == NULL) { in sm501_plat_probe()
1422 platform_set_drvdata(dev, sm); in sm501_plat_probe()
1424 sm->regs = ioremap(sm->io_res->start, resource_size(sm->io_res)); in sm501_plat_probe()
1426 if (sm->regs == NULL) { in sm501_plat_probe()
1432 return sm501_init_dev(sm); in sm501_plat_probe()
1435 release_resource(sm->regs_claim); in sm501_plat_probe()
1436 kfree(sm->regs_claim); in sm501_plat_probe()
1438 kfree(sm); in sm501_plat_probe()
1448 static void sm501_set_power(struct sm501_devdata *sm, int on) in sm501_set_power() argument
1450 struct sm501_platdata *pd = sm->platdata; in sm501_set_power()
1456 if (pd->get_power(sm->dev) == on) { in sm501_set_power()
1457 dev_dbg(sm->dev, "is already %d\n", on); in sm501_set_power()
1463 dev_dbg(sm->dev, "setting power to %d\n", on); in sm501_set_power()
1465 pd->set_power(sm->dev, on); in sm501_set_power()
1466 sm501_mdelay(sm, 10); in sm501_set_power()
1472 struct sm501_devdata *sm = platform_get_drvdata(pdev); in sm501_plat_suspend() local
1474 sm->in_suspend = 1; in sm501_plat_suspend()
1475 sm->pm_misc = smc501_readl(sm->regs + SM501_MISC_CONTROL); in sm501_plat_suspend()
1477 sm501_dump_regs(sm); in sm501_plat_suspend()
1479 if (sm->platdata) { in sm501_plat_suspend()
1480 if (sm->platdata->flags & SM501_FLAG_SUSPEND_OFF) in sm501_plat_suspend()
1481 sm501_set_power(sm, 0); in sm501_plat_suspend()
1489 struct sm501_devdata *sm = platform_get_drvdata(pdev); in sm501_plat_resume() local
1491 sm501_set_power(sm, 1); in sm501_plat_resume()
1493 sm501_dump_regs(sm); in sm501_plat_resume()
1494 sm501_dump_gate(sm); in sm501_plat_resume()
1495 sm501_dump_clk(sm); in sm501_plat_resume()
1499 if (smc501_readl(sm->regs + SM501_MISC_CONTROL) != sm->pm_misc) { in sm501_plat_resume()
1500 dev_info(sm->dev, "SM501_MISC_CONTROL changed over sleep\n"); in sm501_plat_resume()
1501 smc501_writel(sm->pm_misc, sm->regs + SM501_MISC_CONTROL); in sm501_plat_resume()
1507 if (sm->platdata && sm->platdata->init) { in sm501_plat_resume()
1508 sm501_init_regs(sm, sm->platdata->init); in sm501_plat_resume()
1514 sm501_dump_regs(sm); in sm501_plat_resume()
1515 sm501_dump_clk(sm); in sm501_plat_resume()
1517 sm->in_suspend = 0; in sm501_plat_resume()
1573 struct sm501_devdata *sm; in sm501_pci_probe() local
1576 sm = kzalloc(sizeof(struct sm501_devdata), GFP_KERNEL); in sm501_pci_probe()
1577 if (sm == NULL) { in sm501_pci_probe()
1584 dev->dev.platform_data = sm->platdata = &sm501_pci_platdata; in sm501_pci_probe()
1587 sm->pdev_id = 32 + dev->devfn; in sm501_pci_probe()
1589 pci_set_drvdata(dev, sm); in sm501_pci_probe()
1597 sm->dev = &dev->dev; in sm501_pci_probe()
1598 sm->irq = dev->irq; in sm501_pci_probe()
1624 sm->io_res = &dev->resource[1]; in sm501_pci_probe()
1625 sm->mem_res = &dev->resource[0]; in sm501_pci_probe()
1627 sm->regs_claim = request_mem_region(sm->io_res->start, in sm501_pci_probe()
1629 if (sm->regs_claim == NULL) { in sm501_pci_probe()
1635 sm->regs = pci_ioremap_bar(dev, 1); in sm501_pci_probe()
1637 if (sm->regs == NULL) { in sm501_pci_probe()
1643 sm501_init_dev(sm); in sm501_pci_probe()
1647 release_resource(sm->regs_claim); in sm501_pci_probe()
1648 kfree(sm->regs_claim); in sm501_pci_probe()
1652 kfree(sm); in sm501_pci_probe()
1657 static void sm501_remove_sub(struct sm501_devdata *sm, in sm501_remove_sub() argument
1664 static void sm501_dev_remove(struct sm501_devdata *sm) in sm501_dev_remove() argument
1668 list_for_each_entry_safe(smdev, tmp, &sm->devices, list) in sm501_dev_remove()
1669 sm501_remove_sub(sm, smdev); in sm501_dev_remove()
1671 device_remove_file(sm->dev, &dev_attr_dbg_regs); in sm501_dev_remove()
1673 sm501_gpio_remove(sm); in sm501_dev_remove()
1678 struct sm501_devdata *sm = pci_get_drvdata(dev); in sm501_pci_remove() local
1680 sm501_dev_remove(sm); in sm501_pci_remove()
1681 iounmap(sm->regs); in sm501_pci_remove()
1683 release_resource(sm->regs_claim); in sm501_pci_remove()
1684 kfree(sm->regs_claim); in sm501_pci_remove()
1691 struct sm501_devdata *sm = platform_get_drvdata(dev); in sm501_plat_remove() local
1693 sm501_dev_remove(sm); in sm501_plat_remove()
1694 iounmap(sm->regs); in sm501_plat_remove()
1696 release_resource(sm->regs_claim); in sm501_plat_remove()
1697 kfree(sm->regs_claim); in sm501_plat_remove()