linux/drivers/mmc/core/sdio_io.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mmc/core/sdio_io.c
   3 *
   4 *  Copyright 2007-2008 Pierre Ossman
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or (at
   9 * your option) any later version.
  10 */
  11
  12#include <linux/export.h>
  13#include <linux/mmc/host.h>
  14#include <linux/mmc/card.h>
  15#include <linux/mmc/sdio.h>
  16#include <linux/mmc/sdio_func.h>
  17
  18#include "sdio_ops.h"
  19#include "core.h"
  20#include "card.h"
  21
  22/**
  23 *      sdio_claim_host - exclusively claim a bus for a certain SDIO function
  24 *      @func: SDIO function that will be accessed
  25 *
  26 *      Claim a bus for a set of operations. The SDIO function given
  27 *      is used to figure out which bus is relevant.
  28 */
  29void sdio_claim_host(struct sdio_func *func)
  30{
  31        if (WARN_ON(!func))
  32                return;
  33
  34        mmc_claim_host(func->card->host);
  35}
  36EXPORT_SYMBOL_GPL(sdio_claim_host);
  37
  38/**
  39 *      sdio_release_host - release a bus for a certain SDIO function
  40 *      @func: SDIO function that was accessed
  41 *
  42 *      Release a bus, allowing others to claim the bus for their
  43 *      operations.
  44 */
  45void sdio_release_host(struct sdio_func *func)
  46{
  47        if (WARN_ON(!func))
  48                return;
  49
  50        mmc_release_host(func->card->host);
  51}
  52EXPORT_SYMBOL_GPL(sdio_release_host);
  53
  54/**
  55 *      sdio_enable_func - enables a SDIO function for usage
  56 *      @func: SDIO function to enable
  57 *
  58 *      Powers up and activates a SDIO function so that register
  59 *      access is possible.
  60 */
  61int sdio_enable_func(struct sdio_func *func)
  62{
  63        int ret;
  64        unsigned char reg;
  65        unsigned long timeout;
  66
  67        if (!func)
  68                return -EINVAL;
  69
  70        pr_debug("SDIO: Enabling device %s...\n", sdio_func_id(func));
  71
  72        ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IOEx, 0, &reg);
  73        if (ret)
  74                goto err;
  75
  76        reg |= 1 << func->num;
  77
  78        ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IOEx, reg, NULL);
  79        if (ret)
  80                goto err;
  81
  82        timeout = jiffies + msecs_to_jiffies(func->enable_timeout);
  83
  84        while (1) {
  85                ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IORx, 0, &reg);
  86                if (ret)
  87                        goto err;
  88                if (reg & (1 << func->num))
  89                        break;
  90                ret = -ETIME;
  91                if (time_after(jiffies, timeout))
  92                        goto err;
  93        }
  94
  95        pr_debug("SDIO: Enabled device %s\n", sdio_func_id(func));
  96
  97        return 0;
  98
  99err:
 100        pr_debug("SDIO: Failed to enable device %s\n", sdio_func_id(func));
 101        return ret;
 102}
 103EXPORT_SYMBOL_GPL(sdio_enable_func);
 104
 105/**
 106 *      sdio_disable_func - disable a SDIO function
 107 *      @func: SDIO function to disable
 108 *
 109 *      Powers down and deactivates a SDIO function. Register access
 110 *      to this function will fail until the function is reenabled.
 111 */
 112int sdio_disable_func(struct sdio_func *func)
 113{
 114        int ret;
 115        unsigned char reg;
 116
 117        if (!func)
 118                return -EINVAL;
 119
 120        pr_debug("SDIO: Disabling device %s...\n", sdio_func_id(func));
 121
 122        ret = mmc_io_rw_direct(func->card, 0, 0, SDIO_CCCR_IOEx, 0, &reg);
 123        if (ret)
 124                goto err;
 125
 126        reg &= ~(1 << func->num);
 127
 128        ret = mmc_io_rw_direct(func->card, 1, 0, SDIO_CCCR_IOEx, reg, NULL);
 129        if (ret)
 130                goto err;
 131
 132        pr_debug("SDIO: Disabled device %s\n", sdio_func_id(func));
 133
 134        return 0;
 135
 136err:
 137        pr_debug("SDIO: Failed to disable device %s\n", sdio_func_id(func));
 138        return -EIO;
 139}
 140EXPORT_SYMBOL_GPL(sdio_disable_func);
 141
 142/**
 143 *      sdio_set_block_size - set the block size of an SDIO function
 144 *      @func: SDIO function to change
 145 *      @blksz: new block size or 0 to use the default.
 146 *
 147 *      The default block size is the largest supported by both the function
 148 *      and the host, with a maximum of 512 to ensure that arbitrarily sized
 149 *      data transfer use the optimal (least) number of commands.
 150 *
 151 *      A driver may call this to override the default block size set by the
 152 *      core. This can be used to set a block size greater than the maximum
 153 *      that reported by the card; it is the driver's responsibility to ensure
 154 *      it uses a value that the card supports.
 155 *
 156 *      Returns 0 on success, -EINVAL if the host does not support the
 157 *      requested block size, or -EIO (etc.) if one of the resultant FBR block
 158 *      size register writes failed.
 159 *
 160 */
 161int sdio_set_block_size(struct sdio_func *func, unsigned blksz)
 162{
 163        int ret;
 164
 165        if (blksz > func->card->host->max_blk_size)
 166                return -EINVAL;
 167
 168        if (blksz == 0) {
 169                blksz = min(func->max_blksize, func->card->host->max_blk_size);
 170                blksz = min(blksz, 512u);
 171        }
 172
 173        ret = mmc_io_rw_direct(func->card, 1, 0,
 174                SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE,
 175                blksz & 0xff, NULL);
 176        if (ret)
 177                return ret;
 178        ret = mmc_io_rw_direct(func->card, 1, 0,
 179                SDIO_FBR_BASE(func->num) + SDIO_FBR_BLKSIZE + 1,
 180                (blksz >> 8) & 0xff, NULL);
 181        if (ret)
 182                return ret;
 183        func->cur_blksize = blksz;
 184        return 0;
 185}
 186EXPORT_SYMBOL_GPL(sdio_set_block_size);
 187
 188/*
 189 * Calculate the maximum byte mode transfer size
 190 */
 191static inline unsigned int sdio_max_byte_size(struct sdio_func *func)
 192{
 193        unsigned mval = func->card->host->max_blk_size;
 194
 195        if (mmc_blksz_for_byte_mode(func->card))
 196                mval = min(mval, func->cur_blksize);
 197        else
 198                mval = min(mval, func->max_blksize);
 199
 200        if (mmc_card_broken_byte_mode_512(func->card))
 201                return min(mval, 511u);
 202
 203        return min(mval, 512u); /* maximum size for byte mode */
 204}
 205
 206/**
 207 *      sdio_align_size - pads a transfer size to a more optimal value
 208 *      @func: SDIO function
 209 *      @sz: original transfer size
 210 *
 211 *      Pads the original data size with a number of extra bytes in
 212 *      order to avoid controller bugs and/or performance hits
 213 *      (e.g. some controllers revert to PIO for certain sizes).
 214 *
 215 *      If possible, it will also adjust the size so that it can be
 216 *      handled in just a single request.
 217 *
 218 *      Returns the improved size, which might be unmodified.
 219 */
 220unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz)
 221{
 222        unsigned int orig_sz;
 223        unsigned int blk_sz, byte_sz;
 224        unsigned chunk_sz;
 225
 226        orig_sz = sz;
 227
 228        /*
 229         * Do a first check with the controller, in case it
 230         * wants to increase the size up to a point where it
 231         * might need more than one block.
 232         */
 233        sz = mmc_align_data_size(func->card, sz);
 234
 235        /*
 236         * If we can still do this with just a byte transfer, then
 237         * we're done.
 238         */
 239        if (sz <= sdio_max_byte_size(func))
 240                return sz;
 241
 242        if (func->card->cccr.multi_block) {
 243                /*
 244                 * Check if the transfer is already block aligned
 245                 */
 246                if ((sz % func->cur_blksize) == 0)
 247                        return sz;
 248
 249                /*
 250                 * Realign it so that it can be done with one request,
 251                 * and recheck if the controller still likes it.
 252                 */
 253                blk_sz = ((sz + func->cur_blksize - 1) /
 254                        func->cur_blksize) * func->cur_blksize;
 255                blk_sz = mmc_align_data_size(func->card, blk_sz);
 256
 257                /*
 258                 * This value is only good if it is still just
 259                 * one request.
 260                 */
 261                if ((blk_sz % func->cur_blksize) == 0)
 262                        return blk_sz;
 263
 264                /*
 265                 * We failed to do one request, but at least try to
 266                 * pad the remainder properly.
 267                 */
 268                byte_sz = mmc_align_data_size(func->card,
 269                                sz % func->cur_blksize);
 270                if (byte_sz <= sdio_max_byte_size(func)) {
 271                        blk_sz = sz / func->cur_blksize;
 272                        return blk_sz * func->cur_blksize + byte_sz;
 273                }
 274        } else {
 275                /*
 276                 * We need multiple requests, so first check that the
 277                 * controller can handle the chunk size;
 278                 */
 279                chunk_sz = mmc_align_data_size(func->card,
 280                                sdio_max_byte_size(func));
 281                if (chunk_sz == sdio_max_byte_size(func)) {
 282                        /*
 283                         * Fix up the size of the remainder (if any)
 284                         */
 285                        byte_sz = orig_sz % chunk_sz;
 286                        if (byte_sz) {
 287                                byte_sz = mmc_align_data_size(func->card,
 288                                                byte_sz);
 289                        }
 290
 291                        return (orig_sz / chunk_sz) * chunk_sz + byte_sz;
 292                }
 293        }
 294
 295        /*
 296         * The controller is simply incapable of transferring the size
 297         * we want in decent manner, so just return the original size.
 298         */
 299        return orig_sz;
 300}
 301EXPORT_SYMBOL_GPL(sdio_align_size);
 302
 303/* Split an arbitrarily sized data transfer into several
 304 * IO_RW_EXTENDED commands. */
 305static int sdio_io_rw_ext_helper(struct sdio_func *func, int write,
 306        unsigned addr, int incr_addr, u8 *buf, unsigned size)
 307{
 308        unsigned remainder = size;
 309        unsigned max_blocks;
 310        int ret;
 311
 312        if (!func || (func->num > 7))
 313                return -EINVAL;
 314
 315        /* Do the bulk of the transfer using block mode (if supported). */
 316        if (func->card->cccr.multi_block && (size > sdio_max_byte_size(func))) {
 317                /* Blocks per command is limited by host count, host transfer
 318                 * size and the maximum for IO_RW_EXTENDED of 511 blocks. */
 319                max_blocks = min(func->card->host->max_blk_count, 511u);
 320
 321                while (remainder >= func->cur_blksize) {
 322                        unsigned blocks;
 323
 324                        blocks = remainder / func->cur_blksize;
 325                        if (blocks > max_blocks)
 326                                blocks = max_blocks;
 327                        size = blocks * func->cur_blksize;
 328
 329                        ret = mmc_io_rw_extended(func->card, write,
 330                                func->num, addr, incr_addr, buf,
 331                                blocks, func->cur_blksize);
 332                        if (ret)
 333                                return ret;
 334
 335                        remainder -= size;
 336                        buf += size;
 337                        if (incr_addr)
 338                                addr += size;
 339                }
 340        }
 341
 342        /* Write the remainder using byte mode. */
 343        while (remainder > 0) {
 344                size = min(remainder, sdio_max_byte_size(func));
 345
 346                /* Indicate byte mode by setting "blocks" = 0 */
 347                ret = mmc_io_rw_extended(func->card, write, func->num, addr,
 348                         incr_addr, buf, 0, size);
 349                if (ret)
 350                        return ret;
 351
 352                remainder -= size;
 353                buf += size;
 354                if (incr_addr)
 355                        addr += size;
 356        }
 357        return 0;
 358}
 359
 360/**
 361 *      sdio_readb - read a single byte from a SDIO function
 362 *      @func: SDIO function to access
 363 *      @addr: address to read
 364 *      @err_ret: optional status value from transfer
 365 *
 366 *      Reads a single byte from the address space of a given SDIO
 367 *      function. If there is a problem reading the address, 0xff
 368 *      is returned and @err_ret will contain the error code.
 369 */
 370u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret)
 371{
 372        int ret;
 373        u8 val;
 374
 375        if (!func) {
 376                if (err_ret)
 377                        *err_ret = -EINVAL;
 378                return 0xFF;
 379        }
 380
 381        ret = mmc_io_rw_direct(func->card, 0, func->num, addr, 0, &val);
 382        if (err_ret)
 383                *err_ret = ret;
 384        if (ret)
 385                return 0xFF;
 386
 387        return val;
 388}
 389EXPORT_SYMBOL_GPL(sdio_readb);
 390
 391/**
 392 *      sdio_writeb - write a single byte to a SDIO function
 393 *      @func: SDIO function to access
 394 *      @b: byte to write
 395 *      @addr: address to write to
 396 *      @err_ret: optional status value from transfer
 397 *
 398 *      Writes a single byte to the address space of a given SDIO
 399 *      function. @err_ret will contain the status of the actual
 400 *      transfer.
 401 */
 402void sdio_writeb(struct sdio_func *func, u8 b, unsigned int addr, int *err_ret)
 403{
 404        int ret;
 405
 406        if (!func) {
 407                if (err_ret)
 408                        *err_ret = -EINVAL;
 409                return;
 410        }
 411
 412        ret = mmc_io_rw_direct(func->card, 1, func->num, addr, b, NULL);
 413        if (err_ret)
 414                *err_ret = ret;
 415}
 416EXPORT_SYMBOL_GPL(sdio_writeb);
 417
 418/**
 419 *      sdio_writeb_readb - write and read a byte from SDIO function
 420 *      @func: SDIO function to access
 421 *      @write_byte: byte to write
 422 *      @addr: address to write to
 423 *      @err_ret: optional status value from transfer
 424 *
 425 *      Performs a RAW (Read after Write) operation as defined by SDIO spec -
 426 *      single byte is written to address space of a given SDIO function and
 427 *      response is read back from the same address, both using single request.
 428 *      If there is a problem with the operation, 0xff is returned and
 429 *      @err_ret will contain the error code.
 430 */
 431u8 sdio_writeb_readb(struct sdio_func *func, u8 write_byte,
 432        unsigned int addr, int *err_ret)
 433{
 434        int ret;
 435        u8 val;
 436
 437        ret = mmc_io_rw_direct(func->card, 1, func->num, addr,
 438                        write_byte, &val);
 439        if (err_ret)
 440                *err_ret = ret;
 441        if (ret)
 442                return 0xff;
 443
 444        return val;
 445}
 446EXPORT_SYMBOL_GPL(sdio_writeb_readb);
 447
 448/**
 449 *      sdio_memcpy_fromio - read a chunk of memory from a SDIO function
 450 *      @func: SDIO function to access
 451 *      @dst: buffer to store the data
 452 *      @addr: address to begin reading from
 453 *      @count: number of bytes to read
 454 *
 455 *      Reads from the address space of a given SDIO function. Return
 456 *      value indicates if the transfer succeeded or not.
 457 */
 458int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
 459        unsigned int addr, int count)
 460{
 461        return sdio_io_rw_ext_helper(func, 0, addr, 1, dst, count);
 462}
 463EXPORT_SYMBOL_GPL(sdio_memcpy_fromio);
 464
 465/**
 466 *      sdio_memcpy_toio - write a chunk of memory to a SDIO function
 467 *      @func: SDIO function to access
 468 *      @addr: address to start writing to
 469 *      @src: buffer that contains the data to write
 470 *      @count: number of bytes to write
 471 *
 472 *      Writes to the address space of a given SDIO function. Return
 473 *      value indicates if the transfer succeeded or not.
 474 */
 475int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
 476        void *src, int count)
 477{
 478        return sdio_io_rw_ext_helper(func, 1, addr, 1, src, count);
 479}
 480EXPORT_SYMBOL_GPL(sdio_memcpy_toio);
 481
 482/**
 483 *      sdio_readsb - read from a FIFO on a SDIO function
 484 *      @func: SDIO function to access
 485 *      @dst: buffer to store the data
 486 *      @addr: address of (single byte) FIFO
 487 *      @count: number of bytes to read
 488 *
 489 *      Reads from the specified FIFO of a given SDIO function. Return
 490 *      value indicates if the transfer succeeded or not.
 491 */
 492int sdio_readsb(struct sdio_func *func, void *dst, unsigned int addr,
 493        int count)
 494{
 495        return sdio_io_rw_ext_helper(func, 0, addr, 0, dst, count);
 496}
 497EXPORT_SYMBOL_GPL(sdio_readsb);
 498
 499/**
 500 *      sdio_writesb - write to a FIFO of a SDIO function
 501 *      @func: SDIO function to access
 502 *      @addr: address of (single byte) FIFO
 503 *      @src: buffer that contains the data to write
 504 *      @count: number of bytes to write
 505 *
 506 *      Writes to the specified FIFO of a given SDIO function. Return
 507 *      value indicates if the transfer succeeded or not.
 508 */
 509int sdio_writesb(struct sdio_func *func, unsigned int addr, void *src,
 510        int count)
 511{
 512        return sdio_io_rw_ext_helper(func, 1, addr, 0, src, count);
 513}
 514EXPORT_SYMBOL_GPL(sdio_writesb);
 515
 516/**
 517 *      sdio_readw - read a 16 bit integer from a SDIO function
 518 *      @func: SDIO function to access
 519 *      @addr: address to read
 520 *      @err_ret: optional status value from transfer
 521 *
 522 *      Reads a 16 bit integer from the address space of a given SDIO
 523 *      function. If there is a problem reading the address, 0xffff
 524 *      is returned and @err_ret will contain the error code.
 525 */
 526u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret)
 527{
 528        int ret;
 529
 530        ret = sdio_memcpy_fromio(func, func->tmpbuf, addr, 2);
 531        if (err_ret)
 532                *err_ret = ret;
 533        if (ret)
 534                return 0xFFFF;
 535
 536        return le16_to_cpup((__le16 *)func->tmpbuf);
 537}
 538EXPORT_SYMBOL_GPL(sdio_readw);
 539
 540/**
 541 *      sdio_writew - write a 16 bit integer to a SDIO function
 542 *      @func: SDIO function to access
 543 *      @b: integer to write
 544 *      @addr: address to write to
 545 *      @err_ret: optional status value from transfer
 546 *
 547 *      Writes a 16 bit integer to the address space of a given SDIO
 548 *      function. @err_ret will contain the status of the actual
 549 *      transfer.
 550 */
 551void sdio_writew(struct sdio_func *func, u16 b, unsigned int addr, int *err_ret)
 552{
 553        int ret;
 554
 555        *(__le16 *)func->tmpbuf = cpu_to_le16(b);
 556
 557        ret = sdio_memcpy_toio(func, addr, func->tmpbuf, 2);
 558        if (err_ret)
 559                *err_ret = ret;
 560}
 561EXPORT_SYMBOL_GPL(sdio_writew);
 562
 563/**
 564 *      sdio_readl - read a 32 bit integer from a SDIO function
 565 *      @func: SDIO function to access
 566 *      @addr: address to read
 567 *      @err_ret: optional status value from transfer
 568 *
 569 *      Reads a 32 bit integer from the address space of a given SDIO
 570 *      function. If there is a problem reading the address,
 571 *      0xffffffff is returned and @err_ret will contain the error
 572 *      code.
 573 */
 574u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret)
 575{
 576        int ret;
 577
 578        ret = sdio_memcpy_fromio(func, func->tmpbuf, addr, 4);
 579        if (err_ret)
 580                *err_ret = ret;
 581        if (ret)
 582                return 0xFFFFFFFF;
 583
 584        return le32_to_cpup((__le32 *)func->tmpbuf);
 585}
 586EXPORT_SYMBOL_GPL(sdio_readl);
 587
 588/**
 589 *      sdio_writel - write a 32 bit integer to a SDIO function
 590 *      @func: SDIO function to access
 591 *      @b: integer to write
 592 *      @addr: address to write to
 593 *      @err_ret: optional status value from transfer
 594 *
 595 *      Writes a 32 bit integer to the address space of a given SDIO
 596 *      function. @err_ret will contain the status of the actual
 597 *      transfer.
 598 */
 599void sdio_writel(struct sdio_func *func, u32 b, unsigned int addr, int *err_ret)
 600{
 601        int ret;
 602
 603        *(__le32 *)func->tmpbuf = cpu_to_le32(b);
 604
 605        ret = sdio_memcpy_toio(func, addr, func->tmpbuf, 4);
 606        if (err_ret)
 607                *err_ret = ret;
 608}
 609EXPORT_SYMBOL_GPL(sdio_writel);
 610
 611/**
 612 *      sdio_f0_readb - read a single byte from SDIO function 0
 613 *      @func: an SDIO function of the card
 614 *      @addr: address to read
 615 *      @err_ret: optional status value from transfer
 616 *
 617 *      Reads a single byte from the address space of SDIO function 0.
 618 *      If there is a problem reading the address, 0xff is returned
 619 *      and @err_ret will contain the error code.
 620 */
 621unsigned char sdio_f0_readb(struct sdio_func *func, unsigned int addr,
 622        int *err_ret)
 623{
 624        int ret;
 625        unsigned char val;
 626
 627        if (!func) {
 628                if (err_ret)
 629                        *err_ret = -EINVAL;
 630                return 0xFF;
 631        }
 632
 633        ret = mmc_io_rw_direct(func->card, 0, 0, addr, 0, &val);
 634        if (err_ret)
 635                *err_ret = ret;
 636        if (ret)
 637                return 0xFF;
 638
 639        return val;
 640}
 641EXPORT_SYMBOL_GPL(sdio_f0_readb);
 642
 643/**
 644 *      sdio_f0_writeb - write a single byte to SDIO function 0
 645 *      @func: an SDIO function of the card
 646 *      @b: byte to write
 647 *      @addr: address to write to
 648 *      @err_ret: optional status value from transfer
 649 *
 650 *      Writes a single byte to the address space of SDIO function 0.
 651 *      @err_ret will contain the status of the actual transfer.
 652 *
 653 *      Only writes to the vendor specific CCCR registers (0xF0 -
 654 *      0xFF) are permiited; @err_ret will be set to -EINVAL for *
 655 *      writes outside this range.
 656 */
 657void sdio_f0_writeb(struct sdio_func *func, unsigned char b, unsigned int addr,
 658        int *err_ret)
 659{
 660        int ret;
 661
 662        if (!func) {
 663                if (err_ret)
 664                        *err_ret = -EINVAL;
 665                return;
 666        }
 667
 668        if ((addr < 0xF0 || addr > 0xFF) && (!mmc_card_lenient_fn0(func->card))) {
 669                if (err_ret)
 670                        *err_ret = -EINVAL;
 671                return;
 672        }
 673
 674        ret = mmc_io_rw_direct(func->card, 1, 0, addr, b, NULL);
 675        if (err_ret)
 676                *err_ret = ret;
 677}
 678EXPORT_SYMBOL_GPL(sdio_f0_writeb);
 679
 680/**
 681 *      sdio_get_host_pm_caps - get host power management capabilities
 682 *      @func: SDIO function attached to host
 683 *
 684 *      Returns a capability bitmask corresponding to power management
 685 *      features supported by the host controller that the card function
 686 *      might rely upon during a system suspend.  The host doesn't need
 687 *      to be claimed, nor the function active, for this information to be
 688 *      obtained.
 689 */
 690mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func)
 691{
 692        if (!func)
 693                return 0;
 694
 695        return func->card->host->pm_caps;
 696}
 697EXPORT_SYMBOL_GPL(sdio_get_host_pm_caps);
 698
 699/**
 700 *      sdio_set_host_pm_flags - set wanted host power management capabilities
 701 *      @func: SDIO function attached to host
 702 *
 703 *      Set a capability bitmask corresponding to wanted host controller
 704 *      power management features for the upcoming suspend state.
 705 *      This must be called, if needed, each time the suspend method of
 706 *      the function driver is called, and must contain only bits that
 707 *      were returned by sdio_get_host_pm_caps().
 708 *      The host doesn't need to be claimed, nor the function active,
 709 *      for this information to be set.
 710 */
 711int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags)
 712{
 713        struct mmc_host *host;
 714
 715        if (!func)
 716                return -EINVAL;
 717
 718        host = func->card->host;
 719
 720        if (flags & ~host->pm_caps)
 721                return -EINVAL;
 722
 723        /* function suspend methods are serialized, hence no lock needed */
 724        host->pm_flags |= flags;
 725        return 0;
 726}
 727EXPORT_SYMBOL_GPL(sdio_set_host_pm_flags);
 728