Lines Matching refs:func
29 void sdio_claim_host(struct sdio_func *func) in sdio_claim_host() argument
31 if (WARN_ON(!func)) in sdio_claim_host()
34 mmc_claim_host(func->card->host); in sdio_claim_host()
45 void sdio_release_host(struct sdio_func *func) in sdio_release_host() argument
47 if (WARN_ON(!func)) in sdio_release_host()
50 mmc_release_host(func->card->host); in sdio_release_host()
61 int sdio_enable_func(struct sdio_func *func) in sdio_enable_func() argument
67 if (!func) in sdio_enable_func()
70 pr_debug("SDIO: Enabling device %s...\n", sdio_func_id(func)); in sdio_enable_func()
72 ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IOEx, 0, ®); in sdio_enable_func()
76 reg |= 1 << func->num; in sdio_enable_func()
78 ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IOEx, reg, NULL); in sdio_enable_func()
82 timeout = jiffies + msecs_to_jiffies(func->enable_timeout); in sdio_enable_func()
85 ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IORx, 0, ®); in sdio_enable_func()
88 if (reg & (1 << func->num)) in sdio_enable_func()
95 pr_debug("SDIO: Enabled device %s\n", sdio_func_id(func)); in sdio_enable_func()
100 pr_debug("SDIO: Failed to enable device %s\n", sdio_func_id(func)); in sdio_enable_func()
112 int sdio_disable_func(struct sdio_func *func) in sdio_disable_func() argument
117 if (!func) in sdio_disable_func()
120 pr_debug("SDIO: Disabling device %s...\n", sdio_func_id(func)); in sdio_disable_func()
122 ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IOEx, 0, ®); in sdio_disable_func()
126 reg &= ~(1 << func->num); in sdio_disable_func()
128 ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IOEx, reg, NULL); in sdio_disable_func()
132 pr_debug("SDIO: Disabled device %s\n", sdio_func_id(func)); in sdio_disable_func()
137 pr_debug("SDIO: Failed to disable device %s\n", sdio_func_id(func)); in sdio_disable_func()
161 int sdio_set_block_size(struct sdio_func *func, unsigned blksz) in sdio_set_block_size() argument
165 if (blksz > func->card->host->max_blk_size) in sdio_set_block_size()
169 blksz = min(func->max_blksize, func->card->host->max_blk_size); in sdio_set_block_size()
173 ret = mmc_io_rw_direct(func->card, 1, 0, in sdio_set_block_size()
174 SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE, in sdio_set_block_size()
178 ret = mmc_io_rw_direct(func->card, 1, 0, in sdio_set_block_size()
179 SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE + 1, in sdio_set_block_size()
183 func->cur_blksize = blksz; in sdio_set_block_size()
191 static inline unsigned int sdio_max_byte_size(struct sdio_func *func) in sdio_max_byte_size() argument
193 unsigned mval = func->card->host->max_blk_size; in sdio_max_byte_size()
195 if (mmc_blksz_for_byte_mode(func->card)) in sdio_max_byte_size()
196 mval = min(mval, func->cur_blksize); in sdio_max_byte_size()
198 mval = min(mval, func->max_blksize); in sdio_max_byte_size()
200 if (mmc_card_broken_byte_mode_512(func->card)) in sdio_max_byte_size()
220 unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz) in sdio_align_size() argument
233 sz = mmc_align_data_size(func->card, sz); in sdio_align_size()
239 if (sz <= sdio_max_byte_size(func)) in sdio_align_size()
242 if (func->card->cccr.multi_block) { in sdio_align_size()
246 if ((sz % func->cur_blksize) == 0) in sdio_align_size()
253 blk_sz = ((sz + func->cur_blksize - 1) / in sdio_align_size()
254 func->cur_blksize) * func->cur_blksize; in sdio_align_size()
255 blk_sz = mmc_align_data_size(func->card, blk_sz); in sdio_align_size()
261 if ((blk_sz % func->cur_blksize) == 0) in sdio_align_size()
268 byte_sz = mmc_align_data_size(func->card, in sdio_align_size()
269 sz % func->cur_blksize); in sdio_align_size()
270 if (byte_sz <= sdio_max_byte_size(func)) { in sdio_align_size()
271 blk_sz = sz / func->cur_blksize; in sdio_align_size()
272 return blk_sz * func->cur_blksize + byte_sz; in sdio_align_size()
279 chunk_sz = mmc_align_data_size(func->card, in sdio_align_size()
280 sdio_max_byte_size(func)); in sdio_align_size()
281 if (chunk_sz == sdio_max_byte_size(func)) { in sdio_align_size()
287 byte_sz = mmc_align_data_size(func->card, in sdio_align_size()
305 static int sdio_io_rw_ext_helper(struct sdio_func *func, int write, in sdio_io_rw_ext_helper() argument
312 if (!func || (func->num > 7)) in sdio_io_rw_ext_helper()
316 if (func->card->cccr.multi_block && (size > sdio_max_byte_size(func))) { in sdio_io_rw_ext_helper()
319 max_blocks = min(func->card->host->max_blk_count, 511u); in sdio_io_rw_ext_helper()
321 while (remainder >= func->cur_blksize) { in sdio_io_rw_ext_helper()
324 blocks = remainder / func->cur_blksize; in sdio_io_rw_ext_helper()
327 size = blocks * func->cur_blksize; in sdio_io_rw_ext_helper()
329 ret = mmc_io_rw_extended(func->card, write, in sdio_io_rw_ext_helper()
330 func->num, addr, incr_addr, buf, in sdio_io_rw_ext_helper()
331 blocks, func->cur_blksize); in sdio_io_rw_ext_helper()
344 size = min(remainder, sdio_max_byte_size(func)); in sdio_io_rw_ext_helper()
347 ret = mmc_io_rw_extended(func->card, write, func->num, addr, in sdio_io_rw_ext_helper()
370 u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret) in sdio_readb() argument
375 if (!func) { in sdio_readb()
381 ret = mmc_io_rw_direct(func->card, 0, func->num, addr, 0, &val); in sdio_readb()
402 void sdio_writeb(struct sdio_func *func, u8 b, unsigned int addr, int *err_ret) in sdio_writeb() argument
406 if (!func) { in sdio_writeb()
412 ret = mmc_io_rw_direct(func->card, 1, func->num, addr, b, NULL); in sdio_writeb()
431 u8 sdio_writeb_readb(struct sdio_func *func, u8 write_byte, in sdio_writeb_readb() argument
437 ret = mmc_io_rw_direct(func->card, 1, func->num, addr, in sdio_writeb_readb()
458 int sdio_memcpy_fromio(struct sdio_func *func, void *dst, in sdio_memcpy_fromio() argument
461 return sdio_io_rw_ext_helper(func, 0, addr, 1, dst, count); in sdio_memcpy_fromio()
475 int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr, in sdio_memcpy_toio() argument
478 return sdio_io_rw_ext_helper(func, 1, addr, 1, src, count); in sdio_memcpy_toio()
492 int sdio_readsb(struct sdio_func *func, void *dst, unsigned int addr, in sdio_readsb() argument
495 return sdio_io_rw_ext_helper(func, 0, addr, 0, dst, count); in sdio_readsb()
509 int sdio_writesb(struct sdio_func *func, unsigned int addr, void *src, in sdio_writesb() argument
512 return sdio_io_rw_ext_helper(func, 1, addr, 0, src, count); in sdio_writesb()
526 u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret) in sdio_readw() argument
530 ret = sdio_memcpy_fromio(func, func->tmpbuf, addr, 2); in sdio_readw()
536 return le16_to_cpup((__le16 *)func->tmpbuf); in sdio_readw()
551 void sdio_writew(struct sdio_func *func, u16 b, unsigned int addr, int *err_ret) in sdio_writew() argument
555 *(__le16 *)func->tmpbuf = cpu_to_le16(b); in sdio_writew()
557 ret = sdio_memcpy_toio(func, addr, func->tmpbuf, 2); in sdio_writew()
574 u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret) in sdio_readl() argument
578 ret = sdio_memcpy_fromio(func, func->tmpbuf, addr, 4); in sdio_readl()
584 return le32_to_cpup((__le32 *)func->tmpbuf); in sdio_readl()
599 void sdio_writel(struct sdio_func *func, u32 b, unsigned int addr, int *err_ret) in sdio_writel() argument
603 *(__le32 *)func->tmpbuf = cpu_to_le32(b); in sdio_writel()
605 ret = sdio_memcpy_toio(func, addr, func->tmpbuf, 4); in sdio_writel()
621 unsigned char sdio_f0_readb(struct sdio_func *func, unsigned int addr, in sdio_f0_readb() argument
627 if (!func) { in sdio_f0_readb()
633 ret = mmc_io_rw_direct(func->card, 0, 0, addr, 0, &val); in sdio_f0_readb()
657 void sdio_f0_writeb(struct sdio_func *func, unsigned char b, unsigned int addr, in sdio_f0_writeb() argument
662 if (!func) { in sdio_f0_writeb()
668 if ((addr < 0xF0 || addr > 0xFF) && (!mmc_card_lenient_fn0(func->card))) { in sdio_f0_writeb()
674 ret = mmc_io_rw_direct(func->card, 1, 0, addr, b, NULL); in sdio_f0_writeb()
690 mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func) in sdio_get_host_pm_caps() argument
692 if (!func) in sdio_get_host_pm_caps()
695 return func->card->host->pm_caps; in sdio_get_host_pm_caps()
711 int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags) in sdio_set_host_pm_flags() argument
715 if (!func) in sdio_set_host_pm_flags()
718 host = func->card->host; in sdio_set_host_pm_flags()