Lines Matching refs:bus

71 static int ssb_pcmcia_cfg_write(struct ssb_bus *bus, u8 offset, u8 value)  in ssb_pcmcia_cfg_write()  argument
75 res = pcmcia_write_config_byte(bus->host_pcmcia, offset, value); in ssb_pcmcia_cfg_write()
83 static int ssb_pcmcia_cfg_read(struct ssb_bus *bus, u8 offset, u8 *value) in ssb_pcmcia_cfg_read() argument
87 res = pcmcia_read_config_byte(bus->host_pcmcia, offset, value); in ssb_pcmcia_cfg_read()
94 int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus, in ssb_pcmcia_switch_coreidx() argument
106 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS0, in ssb_pcmcia_switch_coreidx()
110 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS1, in ssb_pcmcia_switch_coreidx()
114 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS2, in ssb_pcmcia_switch_coreidx()
121 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS0, &val); in ssb_pcmcia_switch_coreidx()
125 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS1, &val); in ssb_pcmcia_switch_coreidx()
129 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS2, &val); in ssb_pcmcia_switch_coreidx()
150 int ssb_pcmcia_switch_core(struct ssb_bus *bus, in ssb_pcmcia_switch_core() argument
161 err = ssb_pcmcia_switch_coreidx(bus, dev->core_index); in ssb_pcmcia_switch_core()
163 bus->mapped_device = dev; in ssb_pcmcia_switch_core()
168 int ssb_pcmcia_switch_segment(struct ssb_bus *bus, u8 seg) in ssb_pcmcia_switch_segment() argument
176 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_MEMSEG, seg); in ssb_pcmcia_switch_segment()
179 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_MEMSEG, &val); in ssb_pcmcia_switch_segment()
190 bus->mapped_pcmcia_seg = seg; in ssb_pcmcia_switch_segment()
201 struct ssb_bus *bus = dev->bus; in select_core_and_segment() local
211 if (unlikely(dev != bus->mapped_device)) { in select_core_and_segment()
212 err = ssb_pcmcia_switch_core(bus, dev); in select_core_and_segment()
216 if (unlikely(need_segment != bus->mapped_pcmcia_seg)) { in select_core_and_segment()
217 err = ssb_pcmcia_switch_segment(bus, need_segment); in select_core_and_segment()
227 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read8() local
232 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read8()
235 value = readb(bus->mmio + offset); in ssb_pcmcia_read8()
236 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read8()
243 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read16() local
248 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read16()
251 value = readw(bus->mmio + offset); in ssb_pcmcia_read16()
252 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read16()
259 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read32() local
264 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read32()
267 lo = readw(bus->mmio + offset); in ssb_pcmcia_read32()
268 hi = readw(bus->mmio + offset + 2); in ssb_pcmcia_read32()
270 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read32()
279 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_block_read() local
281 void __iomem *addr = bus->mmio + offset; in ssb_pcmcia_block_read()
284 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_block_read()
329 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_block_read()
335 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write8() local
339 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write8()
342 writeb(value, bus->mmio + offset); in ssb_pcmcia_write8()
344 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write8()
349 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write16() local
353 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write16()
356 writew(value, bus->mmio + offset); in ssb_pcmcia_write16()
358 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write16()
363 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write32() local
367 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write32()
370 writew((value & 0x0000FFFF), bus->mmio + offset); in ssb_pcmcia_write32()
371 writew(((value & 0xFFFF0000) >> 16), bus->mmio + offset + 2); in ssb_pcmcia_write32()
374 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write32()
381 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_block_write() local
383 void __iomem *addr = bus->mmio + offset; in ssb_pcmcia_block_write()
386 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_block_write()
430 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_block_write()
448 static int ssb_pcmcia_sprom_command(struct ssb_bus *bus, u8 command) in ssb_pcmcia_sprom_command() argument
454 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROMCTL, command); in ssb_pcmcia_sprom_command()
458 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROMCTL, &value); in ssb_pcmcia_sprom_command()
470 static int ssb_pcmcia_sprom_read(struct ssb_bus *bus, u16 offset, u16 *value) in ssb_pcmcia_sprom_read() argument
477 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO, in ssb_pcmcia_sprom_read()
481 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI, in ssb_pcmcia_sprom_read()
485 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_READ); in ssb_pcmcia_sprom_read()
488 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATALO, &lo); in ssb_pcmcia_sprom_read()
491 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATAHI, &hi); in ssb_pcmcia_sprom_read()
500 static int ssb_pcmcia_sprom_write(struct ssb_bus *bus, u16 offset, u16 value) in ssb_pcmcia_sprom_write() argument
506 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO, in ssb_pcmcia_sprom_write()
510 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI, in ssb_pcmcia_sprom_write()
514 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATALO, in ssb_pcmcia_sprom_write()
518 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATAHI, in ssb_pcmcia_sprom_write()
522 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITE); in ssb_pcmcia_sprom_write()
531 static int ssb_pcmcia_sprom_read_all(struct ssb_bus *bus, u16 *sprom) in ssb_pcmcia_sprom_read_all() argument
536 err = ssb_pcmcia_sprom_read(bus, i, &sprom[i]); in ssb_pcmcia_sprom_read_all()
545 static int ssb_pcmcia_sprom_write_all(struct ssb_bus *bus, const u16 *sprom) in ssb_pcmcia_sprom_write_all() argument
552 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEEN); in ssb_pcmcia_sprom_write_all()
568 err = ssb_pcmcia_sprom_write(bus, i, sprom[i]); in ssb_pcmcia_sprom_write_all()
575 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEDIS); in ssb_pcmcia_sprom_write_all()
704 int ssb_pcmcia_get_invariants(struct ssb_bus *bus, in ssb_pcmcia_get_invariants() argument
716 res = pcmcia_loop_tuple(bus->host_pcmcia, CISTPL_FUNCE, in ssb_pcmcia_get_invariants()
725 res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS, in ssb_pcmcia_get_invariants()
741 struct ssb_bus *bus; in ssb_pcmcia_attr_sprom_show() local
743 bus = ssb_pcmcia_dev_to_bus(pdev); in ssb_pcmcia_attr_sprom_show()
744 if (!bus) in ssb_pcmcia_attr_sprom_show()
747 return ssb_attr_sprom_show(bus, buf, in ssb_pcmcia_attr_sprom_show()
757 struct ssb_bus *bus; in ssb_pcmcia_attr_sprom_store() local
759 bus = ssb_pcmcia_dev_to_bus(pdev); in ssb_pcmcia_attr_sprom_store()
760 if (!bus) in ssb_pcmcia_attr_sprom_store()
763 return ssb_attr_sprom_store(bus, buf, count, in ssb_pcmcia_attr_sprom_store()
772 static int ssb_pcmcia_cor_setup(struct ssb_bus *bus, u8 cor) in ssb_pcmcia_cor_setup() argument
777 err = ssb_pcmcia_cfg_read(bus, cor, &val); in ssb_pcmcia_cor_setup()
782 err = ssb_pcmcia_cfg_write(bus, cor, val); in ssb_pcmcia_cor_setup()
791 int ssb_pcmcia_hardware_setup(struct ssb_bus *bus) in ssb_pcmcia_hardware_setup() argument
795 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_hardware_setup()
800 ssb_pcmcia_switch_segment(bus, 0); in ssb_pcmcia_hardware_setup()
802 err = ssb_pcmcia_cor_setup(bus, CISREG_COR); in ssb_pcmcia_hardware_setup()
806 err = ssb_pcmcia_cor_setup(bus, CISREG_COR + 0x80); in ssb_pcmcia_hardware_setup()
813 void ssb_pcmcia_exit(struct ssb_bus *bus) in ssb_pcmcia_exit() argument
815 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_exit()
818 device_remove_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom); in ssb_pcmcia_exit()
821 int ssb_pcmcia_init(struct ssb_bus *bus) in ssb_pcmcia_init() argument
825 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_init()
828 err = ssb_pcmcia_hardware_setup(bus); in ssb_pcmcia_init()
832 bus->sprom_size = SSB_PCMCIA_SPROM_SIZE; in ssb_pcmcia_init()
833 mutex_init(&bus->sprom_mutex); in ssb_pcmcia_init()
834 err = device_create_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom); in ssb_pcmcia_init()