core.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * linux/drivers/mmc/core/core.h
  3. *
  4. * Copyright (C) 2003 Russell King, All Rights Reserved.
  5. * Copyright 2007 Pierre Ossman
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. */
  11. #ifndef _MMC_CORE_CORE_H
  12. #define _MMC_CORE_CORE_H
  13. #include <linux/delay.h>
  14. #define MMC_CMD_RETRIES 3
  15. struct mmc_bus_ops {
  16. void (*remove)(struct mmc_host *);
  17. void (*detect)(struct mmc_host *);
  18. void (*suspend)(struct mmc_host *);
  19. void (*resume)(struct mmc_host *);
  20. };
  21. void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops);
  22. void mmc_detach_bus(struct mmc_host *host);
  23. void __mmc_release_bus(struct mmc_host *host);
  24. static inline void mmc_bus_get(struct mmc_host *host)
  25. {
  26. unsigned long flags;
  27. spin_lock_irqsave(&host->lock, flags);
  28. host->bus_refs++;
  29. spin_unlock_irqrestore(&host->lock, flags);
  30. }
  31. static inline void mmc_bus_put(struct mmc_host *host)
  32. {
  33. unsigned long flags;
  34. spin_lock_irqsave(&host->lock, flags);
  35. host->bus_refs--;
  36. if ((host->bus_refs == 0) && host->bus_ops)
  37. __mmc_release_bus(host);
  38. spin_unlock_irqrestore(&host->lock, flags);
  39. }
  40. void mmc_set_chip_select(struct mmc_host *host, int mode);
  41. void mmc_set_clock(struct mmc_host *host, unsigned int hz);
  42. void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode);
  43. void mmc_set_bus_width(struct mmc_host *host, unsigned int width);
  44. u32 mmc_select_voltage(struct mmc_host *host, u32 ocr);
  45. void mmc_set_timing(struct mmc_host *host, unsigned int timing);
  46. struct mmc_card *mmc_alloc_card(struct mmc_host *host);
  47. static inline void mmc_delay(unsigned int ms)
  48. {
  49. if (ms < 1000 / HZ) {
  50. cond_resched();
  51. mdelay(ms);
  52. } else {
  53. msleep(ms);
  54. }
  55. }
  56. #endif