generic.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/mach-pxa/generic.c
  3.  *
  4.  *  Author: Nicolas Pitre
  5.  *  Created: Jun 15, 2001
  6.  *  Copyright: MontaVista Software Inc.
  7.  * 
  8.  * Code common to all PXA machines.
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License version 2 as
  12.  * published by the Free Software Foundation.
  13.  *
  14.  * Since this file should be linked before any other machine specific file,
  15.  * the __initcall() here will be executed first.  This serves as default
  16.  * initialization stuff for PXA machines which can be overriden later if
  17.  * need be.
  18.  */
  19. #include <linux/config.h>
  20. #include <linux/module.h>
  21. #include <linux/kernel.h>
  22. #include <linux/init.h>
  23. #include <linux/delay.h>
  24. #include <linux/pm.h>
  25. #include <asm/hardware.h>
  26. #include <asm/system.h>
  27. #include <asm/pgtable.h>
  28. #include <asm/mach/map.h>
  29. #include "generic.h"
  30. /*
  31.  * Return the current lclk requency in units of 10kHz
  32.  */
  33. unsigned int get_lclk_frequency_10khz(void)
  34. {
  35. unsigned int l;
  36. l = CCCR & 0x1f;
  37. switch(l)
  38. {
  39. case 1:
  40. return 9953;
  41. case 2:
  42. return 11796;
  43. case 3:
  44. return 13271;
  45. case 4:
  46. return 14746;
  47. case 5:
  48. return 16589;
  49. case 0xf:
  50. return 3320;
  51. default:
  52. return 0;
  53. }
  54. }
  55. EXPORT_SYMBOL(get_lclk_frequency_10khz);
  56. /*
  57.  * Handy function to set GPIO alternate functions
  58.  */
  59. void set_GPIO_mode(int gpio_mode)
  60. {
  61. long flags;
  62. int gpio = gpio_mode & GPIO_MD_MASK_NR;
  63. int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;
  64. int gafr;
  65. local_irq_save(flags);
  66. if (gpio_mode & GPIO_MD_MASK_DIR)
  67. GPDR(gpio) |= GPIO_bit(gpio);
  68. else
  69. GPDR(gpio) &= ~GPIO_bit(gpio);
  70. gafr = GAFR(gpio) & ~(0x3 << (((gpio) & 0xf)*2));
  71. GAFR(gpio) = gafr |  (fn  << (((gpio) & 0xf)*2));
  72. local_irq_restore(flags);
  73. }
  74. EXPORT_SYMBOL(set_GPIO_mode);
  75. /* 
  76.  * Note that 0xfffe0000-0xffffffff is reserved for the vector table and
  77.  * cache flush area.
  78.  */
  79. static struct map_desc standard_io_desc[] __initdata = {
  80.  /* virtual     physical    length      domain     r  w  c  b */
  81.   { 0xf6000000, 0x20000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCMCIA0 IO */
  82.   { 0xf7000000, 0x30000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* PCMCIA1 IO */
  83.   { 0xf8000000, 0x40000000, 0x01400000, DOMAIN_IO, 0, 1, 0, 0 }, /* Devs */
  84.   { 0xfa000000, 0x44000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* LCD */
  85.   { 0xfc000000, 0x48000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Mem Ctl */
  86.   { 0xff000000, 0x00000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* UNCACHED_PHYS_0 */
  87.   LAST_DESC
  88. };
  89. void __init pxa_map_io(void)
  90. {
  91. iotable_init(standard_io_desc);
  92. }