Lines Matching defs:bus

104 static inline struct device *ssb_sdio_dev(struct ssb_bus *bus)
106 return &bus->host_sdio->dev;
110 static int ssb_sdio_writeb(struct ssb_bus *bus, unsigned int addr, u8 val)
114 sdio_writeb(bus->host_sdio, val, addr, &error);
116 dev_dbg(ssb_sdio_dev(bus), "%08X <- %02x, error %d\n",
124 static u8 ssb_sdio_readb(struct ssb_bus *bus, unsigned int addr)
129 val = sdio_readb(bus->host_sdio, addr, &error);
131 dev_dbg(ssb_sdio_dev(bus), "%08X -> %02x, error %d\n",
140 static int ssb_sdio_set_sbaddr_window(struct ssb_bus *bus, u32 address)
144 error = ssb_sdio_writeb(bus, SBSDIO_FUNC1_SBADDRLOW,
148 error = ssb_sdio_writeb(bus, SBSDIO_FUNC1_SBADDRMID,
152 error = ssb_sdio_writeb(bus, SBSDIO_FUNC1_SBADDRHIGH,
156 bus->sdio_sbaddr = address;
159 dev_dbg(ssb_sdio_dev(bus), "failed to set address window"
167 u32 ssb_sdio_scan_read32(struct ssb_bus *bus, u16 offset)
172 sdio_claim_host(bus->host_sdio);
173 val = sdio_readl(bus->host_sdio, offset, &error);
174 sdio_release_host(bus->host_sdio);
176 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X > %08x, error %d\n",
177 bus->sdio_sbaddr >> 16, offset, val, error);
184 int ssb_sdio_scan_switch_coreidx(struct ssb_bus *bus, u8 coreidx)
190 sdio_claim_host(bus->host_sdio);
191 error = ssb_sdio_set_sbaddr_window(bus, sbaddr);
192 sdio_release_host(bus->host_sdio);
194 dev_err(ssb_sdio_dev(bus), "failed to switch to core %u,"
203 static int ssb_sdio_switch_core(struct ssb_bus *bus, struct ssb_device *dev)
210 if (unlikely(bus->sdio_sbaddr != sbaddr)) {
212 dev_info(ssb_sdio_dev(bus),
216 error = ssb_sdio_set_sbaddr_window(bus, sbaddr);
218 dev_dbg(ssb_sdio_dev(bus), "failed to switch to"
222 bus->mapped_device = dev;
231 struct ssb_bus *bus = dev->bus;
235 sdio_claim_host(bus->host_sdio);
236 if (unlikely(ssb_sdio_switch_core(bus, dev)))
238 offset |= bus->sdio_sbaddr & 0xffff;
240 val = sdio_readb(bus->host_sdio, offset, &error);
242 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X > %02x, error %d\n",
243 bus->sdio_sbaddr >> 16, offset, val, error);
246 sdio_release_host(bus->host_sdio);
253 struct ssb_bus *bus = dev->bus;
257 sdio_claim_host(bus->host_sdio);
258 if (unlikely(ssb_sdio_switch_core(bus, dev)))
260 offset |= bus->sdio_sbaddr & 0xffff;
262 val = sdio_readw(bus->host_sdio, offset, &error);
264 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X > %04x, error %d\n",
265 bus->sdio_sbaddr >> 16, offset, val, error);
268 sdio_release_host(bus->host_sdio);
275 struct ssb_bus *bus = dev->bus;
279 sdio_claim_host(bus->host_sdio);
280 if (unlikely(ssb_sdio_switch_core(bus, dev)))
282 offset |= bus->sdio_sbaddr & 0xffff;
285 val = sdio_readl(bus->host_sdio, offset, &error);
287 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X > %08x, error %d\n",
288 bus->sdio_sbaddr >> 16, offset, val, error);
291 sdio_release_host(bus->host_sdio);
301 struct ssb_bus *bus = dev->bus;
304 sdio_claim_host(bus->host_sdio);
305 if (unlikely(ssb_sdio_switch_core(bus, dev))) {
310 offset |= bus->sdio_sbaddr & 0xffff;
315 error = sdio_readsb(bus->host_sdio, buffer, offset, count);
320 error = sdio_readsb(bus->host_sdio, buffer, offset, count);
326 error = sdio_readsb(bus->host_sdio, buffer, offset, count);
336 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X (width=%u, len=%zu), error %d\n",
337 bus->sdio_sbaddr >> 16, offset, reg_width, saved_count, error);
339 sdio_release_host(bus->host_sdio);
345 struct ssb_bus *bus = dev->bus;
348 sdio_claim_host(bus->host_sdio);
349 if (unlikely(ssb_sdio_switch_core(bus, dev)))
351 offset |= bus->sdio_sbaddr & 0xffff;
353 sdio_writeb(bus->host_sdio, val, offset, &error);
355 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X < %02x, error %d\n",
356 bus->sdio_sbaddr >> 16, offset, val, error);
359 sdio_release_host(bus->host_sdio);
364 struct ssb_bus *bus = dev->bus;
367 sdio_claim_host(bus->host_sdio);
368 if (unlikely(ssb_sdio_switch_core(bus, dev)))
370 offset |= bus->sdio_sbaddr & 0xffff;
372 sdio_writew(bus->host_sdio, val, offset, &error);
374 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X < %04x, error %d\n",
375 bus->sdio_sbaddr >> 16, offset, val, error);
378 sdio_release_host(bus->host_sdio);
383 struct ssb_bus *bus = dev->bus;
386 sdio_claim_host(bus->host_sdio);
387 if (unlikely(ssb_sdio_switch_core(bus, dev)))
389 offset |= bus->sdio_sbaddr & 0xffff;
392 sdio_writel(bus->host_sdio, val, offset, &error);
394 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X < %08x, error %d\n",
395 bus->sdio_sbaddr >> 16, offset, val, error);
397 if (bus->quirks & SSB_QUIRK_SDIO_READ_AFTER_WRITE32)
398 sdio_readl(bus->host_sdio, 0, &error);
400 sdio_release_host(bus->host_sdio);
408 struct ssb_bus *bus = dev->bus;
411 sdio_claim_host(bus->host_sdio);
412 if (unlikely(ssb_sdio_switch_core(bus, dev))) {
416 offset |= bus->sdio_sbaddr & 0xffff;
421 error = sdio_writesb(bus->host_sdio, offset,
426 error = sdio_writesb(bus->host_sdio, offset,
432 error = sdio_writesb(bus->host_sdio, offset,
442 dev_dbg(ssb_sdio_dev(bus), "%04X:%04X (width=%u, len=%zu), error %d\n",
443 bus->sdio_sbaddr >> 16, offset, reg_width, saved_count, error);
445 sdio_release_host(bus->host_sdio);
471 int ssb_sdio_get_invariants(struct ssb_bus *bus,
484 tuple = bus->host_sdio->tuples;
585 dev_err(ssb_sdio_dev(bus), "failed to fetch device invariants: %s\n",
590 void ssb_sdio_exit(struct ssb_bus *bus)
592 if (bus->bustype != SSB_BUSTYPE_SDIO)
597 int ssb_sdio_init(struct ssb_bus *bus)
599 if (bus->bustype != SSB_BUSTYPE_SDIO)
602 bus->sdio_sbaddr = ~0;