)]}'
{
  "commit": "7facc2f9374159795af2a3f8b3e682b4ee230643",
  "tree": "7a62c65e06f480d6924c00108ef8efc625054ccb",
  "parents": [
    "a683b14df8f4320d0ef6cac93a6d9806173bf339"
  ],
  "author": {
    "name": "eric miao",
    "email": "eric.miao@marvell.com",
    "time": "Wed Mar 05 17:16:29 2008 +0800"
  },
  "committer": {
    "name": "Russell King",
    "email": "rmk+kernel@arm.linux.org.uk",
    "time": "Sat Apr 19 11:29:04 2008 +0100"
  },
  "message": "[ARM] pxa: add MFP-alike pin configuration support for pxa{25x, 27x}\n\nPin configuration on pxa{25x,27x} has now separated from generic GPIO\ninto dedicated mfp-pxa2xx.c by this patch. The name \"mfp\" is borrowed\nfrom pxa3xx and is used here to alert the difference between the two\nconcepts: pin configuration and generic GPIOs.  A GPIO can be called\na \"GPIO\" _only_ when the corresponding pin is configured so.\n\nA pin configuration on pxa{25x,27x} is composed of:\n\n    - alternate function selection (or pin mux as commonly called)\n    - low power state or sleep state\n    - wakeup enabling from low power mode\n\nThe following MFP_xxx bit definitions in mfp.h are re-used:\n\n    - MFP_PIN(x)\n    - MFP_AFx\n    - MFP_LPM_DRIVE_{LOW, HIGH}\n    - MFP_LPM_EDGE_*\n\nSelecting alternate function on pxa{25x, 27x} involves configuration\nof GPIO direction register GPDRx, so a new bit and MFP_DIR_{IN, OUT}\nare introduced. And pin configurations are defined by the following\ntwo macros:\n\n    - MFP_CFG_IN  : for input alternate functions\n    - MFP_CFG_OUT : for output alternate functions\n\nEvery configuration should provide a low power state if it configured\nas output using MFP_CFG_OUT().  As a general guideline, the low power\nstate should be decided to minimize the overall power dissipation. As\nan example, it is better to drive the pin as high level in low power\nmode if the GPIO is configured as an active low chip select.\n\nPins configured as GPIO are defined by MFP_CFG_IN(). This is to avoid\nside effects when it is firstly configured as output.  The actual\ndirection of the GPIO is configured by gpio_direction_{input, output}\n\nWakeup enabling on pxa{25x, 27x} is actually GPIO based wakeup, thus\nthe device based enable_irq_wake() mechanism is not applicable here.\n\nE.g.  invoking enable_irq_wake() with a GPIO IRQ as in the following\ncode to enable OTG wakeup is by no means portable and intuitive, and\nit is valid _only_ when GPIO35 is configured as USB_P2_1:\n\n    enable_irq_wake( gpio_to_irq(35) );\n\nTo make things worse, not every GPIO is able to wakeup the system.\nOnly a small number of them can, on either rising or falling edge,\nor when level is high (for keypad GPIOs).\n\nThus, another new bit is introduced to indicate that the GPIO will\nwakeup the system:\n\n    - MFP_LPM_WAKEUP_ENABLE\n\nThe following macros can be used in platform code, and be OR\u0027ed to\nthe GPIO configuration to enable its wakeup:\n\n    - WAKEUP_ON_EDGE_{RISE, FALL, BOTH}\n    - WAKEUP_ON_LEVEL_HIGH\n\nThe WAKEUP_ON_LEVEL_HIGH is used for keypad GPIOs _only_, there is\nno edge settings for those GPIOs.\n\nThese WAKEUP_ON_* flags OR\u0027ed on wrong GPIOs will be ignored in case\nthat platform code author is careless enough.\n\nThe tradeoff here is that the wakeup source is fully determined by\nthe platform configuration, instead of enable_irq_wake().\n\nSigned-off-by: eric miao \u003ceric.miao@marvell.com\u003e\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "10e0c0dce1988a483c8207cceb16ea41307267f2",
      "old_mode": 33188,
      "old_path": "arch/arm/mach-pxa/Makefile",
      "new_id": "df2eb9fcf94265c9d5fcfefe4377bcf1dfb993fb",
      "new_mode": 33188,
      "new_path": "arch/arm/mach-pxa/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f85f681c03933a74db82ab279a845a7bafe59818",
      "new_mode": 33188,
      "new_path": "arch/arm/mach-pxa/mfp-pxa2xx.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0499323010baf7a0d74782874bf73b0adf7c31d0",
      "new_mode": 33188,
      "new_path": "include/asm-arm/arch-pxa/mfp-pxa25x.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "65dfaa9109f390414dc4b9d01693d6a1d2db11d9",
      "new_mode": 33188,
      "new_path": "include/asm-arm/arch-pxa/mfp-pxa27x.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bec6acfcc8cfadfdb51027456a692213c0075064",
      "new_mode": 33188,
      "new_path": "include/asm-arm/arch-pxa/mfp-pxa2xx.h"
    }
  ]
}
