)]}'
{
  "log": [
    {
      "commit": "d62668e1dd830a81ef73ec73386b420cb2a9ca62",
      "tree": "9121a24fe3a04279c374e813342661c16928ea3c",
      "parents": [
        "bcb3a1676b87effbdeffe8da5c44f63433d158d9"
      ],
      "author": {
        "name": "Sergei Shtylyov",
        "email": "sshtylyov@ru.mvista.com",
        "time": "Wed Nov 11 14:26:50 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Nov 12 07:26:00 2009 -0800"
      },
      "message": "gpiolib: fix device_create() result check\n\nIn case of failure, device_create() returns not NULL but the error code.\nThe current code checks for non-NULL though which causes kernel oops in\nsysfs_create_group() when device_create() fails.  Check for error using\nIS_ERR() and propagate the error value using PTR_ERR() instead of fixed\n-ENODEV code returned now...\n\nSigned-off-by: Sergei Shtylyov \u003csshtylyov@ru.mvista.com\u003e\nCc: David Brownell \u003cdavid-b@pacbell.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "828c09509b9695271bcbdc53e9fc9a6a737148d2",
      "tree": "072ffad6f02db7bf4095e07e2b90247cfa042998",
      "parents": [
        "1c4115e595dec42aa0e81ba47ef46e35b34ed428"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Thu Oct 01 15:43:56 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 01 16:11:11 2009 -0700"
      },
      "message": "const: constify remaining file_operations\n\n[akpm@linux-foundation.org: fix KVM]\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nAcked-by: Mike Frysinger \u003cvapier@gentoo.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ff77c352ae17768c61cfc36357f0a3904552f11c",
      "tree": "195c102f75445654e87453cbce284b2f658d13a8",
      "parents": [
        "d120c17faeb391f5b4b99af8b1e190619934ecdd"
      ],
      "author": {
        "name": "Daniel Glöckner",
        "email": "dg@emlix.com",
        "time": "Tue Sep 22 16:46:38 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 23 07:39:48 2009 -0700"
      },
      "message": "gpiolib: allow poll() on value\n\nMany gpio chips allow to generate interrupts when the value of a pin\nchanges.  This patch gives usermode application the opportunity to make\nuse of this feature by calling poll(2) on the /sys/class/gpio/gpioN/value\nsysfs file.  The edge to trigger can be set in the edge file in the same\ndirectory.  Possible values are \"none\", \"rising\", \"falling\", and \"both\".\n\nUsing level triggers is not possible with current sysfs since nothing\nchanges the GPIO value (and the IRQ keeps triggering).  Edge triggering\nwill \"just work\".  Note that if there was an event between read() and\npoll(), the poll() returns immediately.\n\nAlso note that this version only supports true GPIO interrupts.  Some\nlater patch might be able to synthesize this behavior by timer-driven\npolling; some systems seem to need that.\n\n[dbrownell@users.sourceforge.net: align ids to 16 bit ids; whitespace]\nSigned-off-by: Daniel Glöckner \u003cdg@emlix.com\u003e\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a4177ee7f1a83eecb1d75e85d32664b023ef65e9",
      "tree": "614b12b1f28a1a9090d96bea33639265e3e79839",
      "parents": [
        "d8c1acb1664d17dd995e34507533321e986d9215"
      ],
      "author": {
        "name": "Jani Nikula",
        "email": "ext-jani.1.nikula@nokia.com",
        "time": "Tue Sep 22 16:46:33 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 23 07:39:46 2009 -0700"
      },
      "message": "gpiolib: allow exported GPIO nodes to be named using sysfs links\n\nCommit 926b663ce8215ba448960e1ff6e58b67a2c3b99b (gpiolib: allow GPIOs to\nbe named) already provides naming on the chip level. This patch provides\nmore flexibility by allowing multiple names where ever in sysfs on a per\nGPIO basis.\n\nAdapted from David Brownell\u0027s comments on a similar concept:\nhttp://lkml.org/lkml/2009/4/20/203.\n\n[randy.dunlap@oracle.com: fix build for CONFIG_GENERIC_GPIO\u003dn]\nSigned-off-by: Jani Nikula \u003cext-jani.1.nikula@nokia.com\u003e\nAcked-by: David Brownell \u003cdavid-b@pacbell.net\u003e\nCc: Daniel Silverstone \u003cdsilvers@simtec.co.uk\u003e\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8a0cecffeb52363a57257bbbbd58f4c4537a75bb",
      "tree": "ee7f754d49a2f2ad75b72ec59e90e6fa2c0753eb",
      "parents": [
        "926b663ce8215ba448960e1ff6e58b67a2c3b99b"
      ],
      "author": {
        "name": "David Brownell",
        "email": "dbrownell@users.sourceforge.net",
        "time": "Thu Apr 02 16:57:06 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:51 2009 -0700"
      },
      "message": "gpio: gpio_{request,free}() now required (feature removal)\n\nWe want to phase out the GPIO \"autorequest\" mechanism in gpiolib and\nrequire all callers to use gpio_request().\n\n - Update feature-removal-schedule\n - Update the documentation now\n - Convert the relevant pr_warning() in gpiolib to a WARN()\n   so folk using this mechanism get a noisy stack dump\n\nSome drivers and board init code will probably need to change.\nImplementations not using gpiolib will still be fine; they are already\nrequired to implement gpio_{request,free}() stubs.\n\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "926b663ce8215ba448960e1ff6e58b67a2c3b99b",
      "tree": "d60e6add2528b6a61968b0dc2db2f162bb157639",
      "parents": [
        "f30281f4f7c2a0efcfeddad12277dfdada8f08a7"
      ],
      "author": {
        "name": "Daniel Silverstone",
        "email": "dsilvers@simtec.co.uk",
        "time": "Thu Apr 02 16:57:05 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 02 19:04:51 2009 -0700"
      },
      "message": "gpiolib: allow GPIOs to be named\n\nAllow GPIOs in GPIOLIB chips to be named.  This name is then used when the\nGPIO is exported to sysfs, although it could be used elsewhere if deemed\nuseful.\n\nSigned-off-by: Daniel Silverstone \u003cdsilvers@simtec.co.uk\u003e\nCc: David Brownell \u003cdavid-b@pacbell.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7460db567bbca76bf087d1694d792a1a96bdaa26",
      "tree": "cb0da014bc604f11525d1e9d23b305b007914549",
      "parents": [
        "7bcc1bb1232de6efc0b85e0c7fe38e90b2436318"
      ],
      "author": {
        "name": "Magnus Damm",
        "email": "damm@igel.co.jp",
        "time": "Thu Jan 29 14:25:12 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 29 18:04:43 2009 -0800"
      },
      "message": "gpiolib: fix request related issue\n\nFix request-already-requested handling in gpio_request().\n\nSigned-off-by: Magnus Damm \u003cdamm@igel.co.jp\u003e\nAcked-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.28.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14ab309d33efda7b78bad1d331fd1963ed3bd906",
      "tree": "a8a37c43836932c45c164cbbf2ea286e3237e65a",
      "parents": [
        "8f4bbd9f59a6ec0d96ae374ea2a46bfa90cc26e4"
      ],
      "author": {
        "name": "Kay Sievers",
        "email": "kay.sievers@vrfy.org",
        "time": "Tue Jan 06 10:44:42 2009 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Tue Jan 06 10:44:42 2009 -0800"
      },
      "message": "gpio: struct device - replace bus_id with dev_name(), dev_set_name()\n\nSigned-off-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "6e8ba729b6332f2a75572e02480936d2b51665aa",
      "tree": "1a705976c90e3160e1afe4e5669782316ff420f9",
      "parents": [
        "1c207f952a3a39f9d07a3e9de0cf6b9a9464eeaa"
      ],
      "author": {
        "name": "Jarkko Nikula",
        "email": "jarkko.nikula@nokia.com",
        "time": "Wed Nov 19 15:36:17 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 19 18:49:57 2008 -0800"
      },
      "message": "gpiolib: extend gpio label column width in debugfs file\n\nThere are already various drivers having bigger label than 12 bytes.  Most\nof them fit well under 20 bytes but make column width exact so that\noversized labels don\u0027t mess up output alignment.\n\nSigned-off-by: Jarkko Nikula \u003cjarkko.nikula@nokia.com\u003e\nAcked-by: David Brownell \u003cdavid-b@pacbell.net\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.26.x, 2.6.26.x, 2.6.27.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9301975ec251bab1ad7cfcb84a688b26187e4e4a",
      "tree": "91e48be0bdc67cbcb75bc8a299a3dcf168e0a814",
      "parents": [
        "7110879cf2afbfb7af79675f5ff109e63d631c25",
        "dd3a1db900f2a215a7d7dd71b836e149a6cf5fed"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 13:22:50 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 13:23:01 2008 -0700"
      },
      "message": "Merge branch \u0027genirq-v28-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\nThis merges branches irq/genirq, irq/sparseirq-v4, timers/hpet-percpu\nand x86/uv.\n\nThe sparseirq branch is just preliminary groundwork: no sparse IRQs are\nactually implemented by this tree anymore - just the new APIs are added\nwhile keeping the old way intact as well (the new APIs map 1:1 to\nirq_desc[]).  The \u0027real\u0027 sparse IRQ support will then be a relatively\nsmall patch ontop of this - with a v2.6.29 merge target.\n\n* \u0027genirq-v28-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (178 commits)\n  genirq: improve include files\n  intr_remapping: fix typo\n  io_apic: make irq_mis_count available on 64-bit too\n  genirq: fix name space collisions of nr_irqs in arch/*\n  genirq: fix name space collision of nr_irqs in autoprobe.c\n  genirq: use iterators for irq_desc loops\n  proc: fixup irq iterator\n  genirq: add reverse iterator for irq_desc\n  x86: move ack_bad_irq() to irq.c\n  x86: unify show_interrupts() and proc helpers\n  x86: cleanup show_interrupts\n  genirq: cleanup the sparseirq modifications\n  genirq: remove artifacts from sparseirq removal\n  genirq: revert dynarray\n  genirq: remove irq_to_desc_alloc\n  genirq: remove sparse irq code\n  genirq: use inline function for irq_to_desc\n  genirq: consolidate nr_irqs and for_each_irq_desc()\n  x86: remove sparse irq from Kconfig\n  genirq: define nr_irqs for architectures with GENERIC_HARDIRQS\u003dn\n  ...\n"
    },
    {
      "commit": "978ccaa8ea5d8c7bf6b676209f2fc126eae6355b",
      "tree": "4d639469edbdb2df8ec364bae1719bd083bc04da",
      "parents": [
        "e3274e915061a65717454106301d4a5ea8f71783"
      ],
      "author": {
        "name": "David Brownell",
        "email": "dbrownell@users.sourceforge.net",
        "time": "Sat Oct 18 20:27:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:52:36 2008 -0700"
      },
      "message": "gpiolib: fix oops in gpio_get_value_cansleep()\n\nWe can get the following oops from gpio_get_value_cansleep() when a GPIO\ncontroller doesn\u0027t provide a get() callback:\n\n Unable to handle kernel paging request for instruction fetch\n Faulting instruction address: 0x00000000\n Oops: Kernel access of bad area, sig: 11 [#1]\n [...]\n NIP [00000000] 0x0\n LR [c0182fb0] gpio_get_value_cansleep+0x40/0x50\n Call Trace:\n [c7b79e80] [c0183f28] gpio_value_show+0x5c/0x94\n [c7b79ea0] [c01a584c] dev_attr_show+0x30/0x7c\n [c7b79eb0] [c00d6b48] fill_read_buffer+0x68/0xe0\n [c7b79ed0] [c00d6c54] sysfs_read_file+0x94/0xbc\n [c7b79ef0] [c008f24c] vfs_read+0xb4/0x16c\n [c7b79f10] [c008f580] sys_read+0x4c/0x90\n [c7b79f40] [c0013a14] ret_from_syscall+0x0/0x38\n\nIt\u0027s OK to request the value of *any* GPIO; most GPIOs are bidirectional,\nso configuring them as outputs just enables an output driver and doesn\u0027t\ndisable the input logic.\n\nSo the problem is that gpio_get_value_cansleep() isn\u0027t making the same\nsanity check that gpio_get_value() does: making sure this GPIO isn\u0027t one\nof the atypical \"no input logic\" cases.\n\nReported-by: Anton Vorontsov \u003cavorontsov@ru.mvista.com\u003e\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.27.x, 2.6.26.x, 2.6.25.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e3274e915061a65717454106301d4a5ea8f71783",
      "tree": "e88cb4ef896fe2f4e38b58ed1b0d2f2e543c70cb",
      "parents": [
        "c8fc40cd345bfd88d8a98e7916909b9143502999"
      ],
      "author": {
        "name": "Steven A. Falco",
        "email": "sfalco@harris.com",
        "time": "Sat Oct 18 20:27:48 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 20 08:52:36 2008 -0700"
      },
      "message": "gpio: modify sysfs gpio export so that \"value\" displays as 0 or 1\n\ngpiolib can export GPIOs to userspace via sysfs.  This patch modifies the\ngpio_value_show() so that any non-zero value is explicitly printed as \"1\",\nrather than whatever numerical value the lower-level driver returns.\n\nSigned-off-by: Steve Falco \u003csfalco@harris.com\u003e\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "35e8bb5175c1a6ff6253f1a2acb30bfe52a2f500",
      "tree": "88a1e9695824f88efef3340fd53f8dbe576f5852",
      "parents": [
        "93a22f8b95756c53e80308820892119c910d2739"
      ],
      "author": {
        "name": "David Brownell",
        "email": "dbrownell@users.sourceforge.net",
        "time": "Wed Oct 15 22:03:16 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:40 2008 -0700"
      },
      "message": "gpiolib: request/free hooks\n\nAdd a new internal mechanism to gpiolib to support low power\noperations by letting gpio_chip instances see when their GPIOs\nare in use.  When no GPIOs are active, chips may be able to\nenter lower powered runtime states by disabling clocks and/or\npower domains.\n\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nCc: \"Magnus Damm\" \u003cmagnus.damm@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0f6d504e73b49374c6093efe6aa60ab55058248a",
      "tree": "414c9e591ba23b2126bc9cad4e0efb1b60693b2d",
      "parents": [
        "2f8d11971b9f54362437ce70f4d1911f0996d542"
      ],
      "author": {
        "name": "David Brownell",
        "email": "dbrownell@users.sourceforge.net",
        "time": "Wed Oct 15 22:03:14 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:40 2008 -0700"
      },
      "message": "gpiolib: gpio_to_irq() hooks\n\nAdd a new gpiolib mechanism: gpio_chip instances can provide mappings\nbetween their (input) GPIOs and any associated IRQs.  This makes it easier\nfor platforms to support IRQs that are provided by board-specific external\nchips instead of as part of their core (such as SOC-integrated GPIOs).\n\nAlso update the irq_to_gpio() description, saying to avoid it because it\u0027s\nnot always supported.\n\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3d599d1ca57f443e5c4ff5af1e69d90350082f77",
      "tree": "475b066c18f2b610d6a0ee0a6313237ce61afc4a",
      "parents": [
        "c557fa3e4c156b8713c177d9dde08920130bf551"
      ],
      "author": {
        "name": "Uwe Kleine-König",
        "email": "ukleinek@informatik.uni-freiburg.de",
        "time": "Wed Oct 15 22:03:12 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 16 11:21:40 2008 -0700"
      },
      "message": "gpio_free might sleep, generic part\n\nAccording to the documentation gpio_free should only be called from task\ncontext only.  To make this more explicit add a might sleep to all\nimplementations.\n\nThis is the generic part which changes gpiolib and the fallback\nimplementation only.\n\nSigned-off-by: Uwe Kleine-König \u003cukleinek@informatik.uni-freiburg.de\u003e\nCc: David Brownell \u003cdavid-b@pacbell.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "08678b0841267c1d00d771fe01548d86043d065e",
      "tree": "7debb21f9e9a768ced43077f7376797a0c46f8c0",
      "parents": [
        "bfea1238beac9d306eeac081c67de5ca6aec4c7a"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yhlu.kernel@gmail.com",
        "time": "Tue Aug 19 20:50:05 2008 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Oct 16 16:52:29 2008 +0200"
      },
      "message": "generic: sparse irqs: use irq_desc() together with dyn_array, instead of irq_desc[]\n\nadd CONFIG_HAVE_SPARSE_IRQ to for use condensed array.\nGet rid of irq_desc[] array assumptions.\n\nPreallocate 32 irq_desc, and irq_desc() will try to get more.\n\n( No change in functionality is expected anywhere, except the odd build\n  failure where we missed a code site or where a crossing commit itroduces\n  new irq_desc[] usage. )\n\nv2: according to Eric, change get_irq_desc() to irq_desc()\n\nSigned-off-by: Yinghai Lu \u003cyhlu.kernel@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d8f388d8dc8d4f36539dd37c1fff62cc404ea0fc",
      "tree": "df8603775c889f29f8a03c77b9f7913bfd90d296",
      "parents": [
        "8b6dd986823a8d92ed9f54baa5cef8604d9d9d44"
      ],
      "author": {
        "name": "David Brownell",
        "email": "dbrownell@users.sourceforge.net",
        "time": "Fri Jul 25 01:46:07 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 25 10:53:30 2008 -0700"
      },
      "message": "gpio: sysfs interface\n\nThis adds a simple sysfs interface for GPIOs.\n\n    /sys/class/gpio\n    \t/export ... asks the kernel to export a GPIO to userspace\n    \t/unexport ... to return a GPIO to the kernel\n        /gpioN ... for each exported GPIO #N\n\t    /value ... always readable, writes fail for input GPIOs\n\t    /direction ... r/w as: in, out (default low); write high, low\n\t/gpiochipN ... for each gpiochip; #N is its first GPIO\n\t    /base ... (r/o) same as N\n\t    /label ... (r/o) descriptive, not necessarily unique\n\t    /ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1)\n\nGPIOs claimed by kernel code may be exported by its owner using a new\ngpio_export() call, which should be most useful for driver debugging.\nSuch exports may optionally be done without a \"direction\" attribute.\n\nUserspace may ask to take over a GPIO by writing to a sysfs control file,\nhelping to cope with incomplete board support or other \"one-off\"\nrequirements that don\u0027t merit full kernel support:\n\n  echo 23 \u003e /sys/class/gpio/export\n\t... will gpio_request(23, \"sysfs\") and gpio_export(23);\n\tuse /sys/class/gpio/gpio-23/direction to (re)configure it,\n\twhen that GPIO can be used as both input and output.\n  echo 23 \u003e /sys/class/gpio/unexport\n\t... will gpio_free(23), when it was exported as above\n\nThe extra D-space footprint is a few hundred bytes, except for the sysfs\nresources associated with each exported GPIO.  The additional I-space\nfootprint is about two thirds of the current size of gpiolib (!).  Since\nno /dev node creation is involved, no \"udev\" support is needed.\n\nRelated changes:\n\n  * This adds a device pointer to \"struct gpio_chip\".  When GPIO\n    providers initialize that, sysfs gpio class devices become children of\n    that device instead of being \"virtual\" devices.\n\n  * The (few) gpio_chip providers which have such a device node have\n    been updated.\n\n  * Some gpio_chip drivers also needed to update their module \"owner\"\n    field ...  for which missing kerneldoc was added.\n\n  * Some gpio_chips don\u0027t support input GPIOs.  Those GPIOs are now\n    flagged appropriately when the chip is registered.\n\nBased on previous patches, and discussion both on and off LKML.\n\nA Documentation/ABI/testing/sysfs-gpio update is ready to submit once this\nmerges to mainline.\n\n[akpm@linux-foundation.org: a few maintenance build fixes]\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nCc: Guennadi Liakhovetski \u003cg.liakhovetski@pengutronix.de\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bff5fda972dc23bd1806a47c2098ae173585d013",
      "tree": "d26a3e5f18ee91b25dc4da7f1d1d0f022dd8d72d",
      "parents": [
        "1d1c1d9b557a12320174058d2d313ffb0f8611f4"
      ],
      "author": {
        "name": "Trent Piepho",
        "email": "xyzzy@speakeasy.org",
        "time": "Fri May 23 13:04:44 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat May 24 09:56:11 2008 -0700"
      },
      "message": "gpiolib: fix off by one errors\n\nThe last gpio belonging to a chip is chip-\u003ebase + chip-\u003engpios - 1.  Some\nplaces in the code, but not all, forgot the critical minus one.\n\nSigned-off-by: Trent Piepho \u003cxyzzy@speakeasy.org\u003e\nAcked-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "145980a0b07520f0f82cc40999acc92b349ea40c",
      "tree": "48bc21442adcda4561b8f5356380cc168d059619",
      "parents": [
        "bdf4bbaaee3d4b8f555658333cbce1affe9070fb"
      ],
      "author": {
        "name": "Harvey Harrison",
        "email": "harvey.harrison@gmail.com",
        "time": "Wed Apr 30 00:54:57 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 30 08:29:53 2008 -0700"
      },
      "message": "drivers: replace remaining __FUNCTION__ occurrences\n\n__FUNCTION__ is gcc-specific, use __func__\n\nSigned-off-by: Harvey Harrison \u003charvey.harrison@gmail.com\u003e\nCc: Ben Dooks \u003cben-linux@fluff.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "169b6a7a6e91e1ea32136681b475cbaf2074bf35",
      "tree": "bf29842528e61cb07c581e43acbe3619a25746ab",
      "parents": [
        "8d0aab2f16c4fa170f32e7a74a52cd0122bbafef"
      ],
      "author": {
        "name": "Anton Vorontsov",
        "email": "avorontsov@ru.mvista.com",
        "time": "Mon Apr 28 02:14:47 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:34 2008 -0700"
      },
      "message": "gpiochip_reserve()\n\nAdd a new function gpiochip_reserve() to reserve ranges of gpios that platform\ncode has pre-allocated.  That is, this marks gpio numbers which will be\nclaimed by drivers that haven\u0027t yet been loaded, and thus are not available\nfor dynamic gpio number allocation.\n\n[akpm@linux-foundation.org: remove unneeded __must_check]\n[david-b@pacbell.net: don\u0027t export gpiochip_reserve (section fix)]\nSigned-off-by: Anton Vorontsov \u003cavorontsov@ru.mvista.com\u003e\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "8d0aab2f16c4fa170f32e7a74a52cd0122bbafef",
      "tree": "c9e559489af8f2cbcceda8a323e4ac496114765a",
      "parents": [
        "e6de1808f8ebfeb7e49f3c5a30cb8f2032beb287"
      ],
      "author": {
        "name": "Anton Vorontsov",
        "email": "avorontsov@ru.mvista.com",
        "time": "Mon Apr 28 02:14:46 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:34 2008 -0700"
      },
      "message": "gpiolib: dynamic gpio number allocation\n\nIf gpio_chip-\u003ebase is negative during registration, gpiolib performs dynamic\nbase allocation.  This is useful for devices that aren\u0027t always present, such\nas GPIOs on hotplugged devices rather than mainboards.  (This behavior was\npreviously specified but not implemented.)\n\nTo avoid using any numbers that may have been explicitly assigned but not yet\nregistered, this dynamic allocation assigns GPIO numbers from the biggest\nnumber on down, instead of from the smallest on up.\n\nSigned-off-by: Anton Vorontsov \u003cavorontsov@ru.mvista.com\u003e\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e6de1808f8ebfeb7e49f3c5a30cb8f2032beb287",
      "tree": "2230ea8f384449c7785d636ab016af3b2aa20123",
      "parents": [
        "d72cbed0c486e3db8b56380635f8e845073ce63a"
      ],
      "author": {
        "name": "Guennadi Liakhovetski",
        "email": "g.liakhovetski@pengutronix.de",
        "time": "Mon Apr 28 02:14:46 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:34 2008 -0700"
      },
      "message": "gpio: define gpio_is_valid()\n\nIntroduce a gpio_is_valid() predicate; use it in gpiolib.\n\nSigned-off-by: Guennadi Liakhovetski \u003cg.liakhovetski@pengutronix.de\u003e\n    [ use inline function; follow the gpio_* naming convention;\n      work without gpiolib; all programming interfaces need docs ]\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "438d8908b379b6322fc3b28d45c9ebdddf58bc20",
      "tree": "ce9439dc8c7e5d9e80f514751fb3b4ce4e414233",
      "parents": [
        "73fcdc9e15c27bb92595c611c8938a36645ea20d"
      ],
      "author": {
        "name": "Guennadi Liakhovetski",
        "email": "g.liakhovetski@pengutronix.de",
        "time": "Mon Apr 28 02:14:44 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:34 2008 -0700"
      },
      "message": "gpiolib: better rmmod infrastructure\n\nAs long as one or more GPIOs on a gpio chip are used its driver should not be\nunloaded.  The existing mechanism (gpiochip_remove failure) doesn\u0027t address\nthat, since rmmod can no longer be made to fail by having the cleanup code\nreport errors.  Module usecounts are the solution.\n\nAssuming standard \"initialize struct to zero\" policies, this change won\u0027t\naffect SOC platform drivers.  However, drivers for external chips (on I2C and\nSPI busses) should be updated if they can be built as modules.\n\nSigned-off-by: Guennadi Liakhovetski \u003cg.liakhovetski@pengutronix.de\u003e\n[ gpio_ensure_requested() needs to update module usecounts too ]\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d2876d08d86f22ce1f276fc29f6baec8b53e32c6",
      "tree": "d9d059fad208001edb58d9dff3ed6ad64c8e7407",
      "parents": [
        "a9c5fff542544c8595bb12efeb278a96d99386fc"
      ],
      "author": {
        "name": "David Brownell",
        "email": "dbrownell@users.sourceforge.net",
        "time": "Mon Feb 04 22:28:20 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Feb 05 09:44:12 2008 -0800"
      },
      "message": "gpiolib: add gpio provider infrastructure\n\nProvide new implementation infrastructure that platforms may choose to use\nwhen implementing the GPIO programming interface.  Platforms can update their\nGPIO support to use this.  In many cases the incremental cost to access a\nnon-inlined GPIO should be less than a dozen instructions, with the memory\ncost being about a page (total) of extra data and code.  The upside is:\n\n  * Providing two features which were \"want to have (but OK to defer)\" when\n    GPIO interfaces were first discussed in November 2006:\n\n    -\tA \"struct gpio_chip\" to plug in GPIOs that aren\u0027t directly supported\n\tby SOC platforms, but come from FPGAs or other multifunction devices\n\tusing conventional device registers (like UCB-1x00 or SM501 GPIOs,\n\tand southbridges in PCs with more open specs than usual).\n\n    -\tFull support for message-based GPIO expanders, where registers are\n\taccessed through sleeping I/O calls.  Previous support for these\n\t\"cansleep\" calls was just stubs.  (One example: the widely used\n\tpcf8574 I2C chips, with 8 GPIOs each.)\n\n  * Including a non-stub implementation of the gpio_{request,free}() calls,\n    making those calls much more useful.  The diagnostic labels are also\n    recorded given DEBUG_FS, so /sys/kernel/debug/gpio can show a snapshot\n    of all GPIOs known to this infrastructure.\n\nThe driver programming interfaces introduced in 2.6.21 do not change at all;\nthis infrastructure is entirely below those covers.\n\nSigned-off-by: David Brownell \u003cdbrownell@users.sourceforge.net\u003e\nCc: Sam Ravnborg \u003csam@ravnborg.org\u003e\nCc: Jean Delvare \u003ckhali@linux-fr.org\u003e\nCc: Eric Miao \u003ceric.miao@marvell.com\u003e\nCc: Haavard Skinnemoen \u003chskinnemoen@atmel.com\u003e\nCc: Philipp Zabel \u003cphilipp.zabel@gmail.com\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: Ben Gardner \u003cbgardner@wabtec.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ]
}
