1. 19 7月, 2014 6 次提交
    • B
      power/reset: Fix GPL v2 license string typo · 661468b4
      Bjorn Helgaas 提交于
      Per license_is_gpl_compatible(), the MODULE_LICENSE() string for GPL v2 is
      "GPL v2", not "GPLv2".  Use "GPL v2" so this module doesn't taint the
      kernel.
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Acked-by: NAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: NSebastian Reichel <sre@kernel.org>
      661468b4
    • L
      power: poweroff: gpio: convert to use descriptors · 86336ba4
      Linus Walleij 提交于
      This switches the GPIO poweroff driver to use GPIO descriptors
      rather than numeral GPIOs. We get rid of the specific inversion
      handling as GPIO descriptors know if they are active low or
      high and can assert the line properly, so we do not need to
      check the flag OF_GPIO_ACTIVE_LOW returned from the old call
      of_get_gpio_flags() anymore.
      
      Also convert to use managed resources and use dev_* message
      printing while we're at it.
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      Reviewed-by: NAlexandre Courbot <acourbot@nvidia.com>
      Signed-off-by: NSebastian Reichel <sre@kernel.org>
      86336ba4
    • M
      bq27000: report missing device better. · 3dd843e1
      Marek Belisko 提交于
      One an hdq buss, a missing device reads as 0xff, not -1.
      So do a translation to allow detecting of a missing bus.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NSebastian Reichel <sre@kernel.org>
      3dd843e1
    • H
      bq27x00_battery: Introduce the use of the managed version of kzalloc · 1cb82fdb
      Himangi Saraogi 提交于
      This patch moves data allocated using kzalloc to managed data allocated
      using devm_kzalloc and cleans now unnecessary kfrees in probe and remove
      functions for both platform and i2c drivers. Also, the unecessary
      variable ret and labels batt_failed3, err_free were removed.
      
      The following Coccinele script was used for making the change:
      
      @platform@
      identifier p, probefn, removefn;
      @@
      struct platform_driver p = {
        .probe = probefn,
        .remove = removefn,
      };
      
      @prb@
      identifier platform.probefn, pdev;
      expression e, e1, e2;
      @@
      probefn(struct platform_device *pdev, ...) {
        <+...
      - e = kzalloc(e1, e2)
      + e = devm_kzalloc(&pdev->dev, e1, e2)
        ...
      ?-kfree(e);
        ...+>
      }
      
      @rem depends on prb@
      identifier platform.removefn;
      expression e;
      @@
      removefn(...) {
        <...
      - kfree(e);
        ...>
      }
      Signed-off-by: NHimangi Saraogi <himangi774@gmail.com>
      Acked-by: NJulia Lawall <julia.lawall@lip6.fr>
      Signed-off-by: NSebastian Reichel <sre@kernel.org>
      1cb82fdb
    • S
      rx51_battery: convert to iio consumer · 57da5e86
      Sebastian Reichel 提交于
      Update rx51-battery driver to use the new IIO API of
      twl4030-madc and add DT support.
      Signed-off-by: NSebastian Reichel <sre@kernel.org>
      57da5e86
    • S
      bq2415x_charger: Fix Atomic Sleep Bug · 3c018504
      Sebastian Reichel 提交于
      Move sysfs_notify and i2c_transfer calls from bq2415x_notifier_call
      to bq2415x_timer_work to avoid sleeping in atomic context.
      
      This fixes the following bug:
      
      [ 7.667449] Workqueue: events power_supply_changed_work
      [ 7.673034] [<c0015c28>] (unwind_backtrace+0x0/0xe0) from [<c0011e1c>] (show_stack+0x10/0x14)
      [ 7.682098] [<c0011e1c>] (show_stack+0x10/0x14) from [<c052cdd0>] (dump_stack+0x78/0xac)
      [ 7.690704] [<c052cdd0>] (dump_stack+0x78/0xac) from [<c052a044>] (__schedule_bug+0x48/0x60)
      [ 7.699645] [<c052a044>] (__schedule_bug+0x48/0x60) from [<c053071c>] (__schedule+0x74/0x638)
      [ 7.708618] [<c053071c>] (__schedule+0x74/0x638) from [<c05301fc>] (schedule_timeout+0x1dc/0x24c)
      [ 7.718017] [<c05301fc>] (schedule_timeout+0x1dc/0x24c) from [<c05316ec>] (wait_for_common+0x138/0x17c)
      [ 7.727966] [<c05316ec>] (wait_for_common+0x138/0x17c) from [<c0362a70>] (omap_i2c_xfer+0x340/0x4a0)
      [ 7.737640] [<c0362a70>] (omap_i2c_xfer+0x340/0x4a0) from [<c035d928>] (__i2c_transfer+0x40/0x74)
      [ 7.747039] [<c035d928>] (__i2c_transfer+0x40/0x74) from [<c035e22c>] (i2c_transfer+0x6c/0x90)
      [ 7.756195] [<c035e22c>] (i2c_transfer+0x6c/0x90) from [<c037ad24>] (bq2415x_i2c_write+0x48/0x78)
      [ 7.765563] [<c037ad24>] (bq2415x_i2c_write+0x48/0x78) from [<c037ae60>] (bq2415x_set_weak_battery_voltage+0x4c/0x50)
      [ 7.776824] [<c037ae60>] (bq2415x_set_weak_battery_voltage+0x4c/0x50) from [<c037bce8>] (bq2415x_set_mode+0xdc/0x14c)
      [ 7.788085] [<c037bce8>] (bq2415x_set_mode+0xdc/0x14c) from [<c037bfb8>] (bq2415x_notifier_call+0xa8/0xb4)
      [ 7.798309] [<c037bfb8>] (bq2415x_notifier_call+0xa8/0xb4) from [<c005f228>] (notifier_call_chain+0x38/0x68)
      [ 7.808715] [<c005f228>] (notifier_call_chain+0x38/0x68) from [<c005f284>] (__atomic_notifier_call_chain+0x2c/0x3c)
      [ 7.819732] [<c005f284>] (__atomic_notifier_call_chain+0x2c/0x3c) from [<c005f2a8>] (atomic_notifier_call_chain+0x14/0x18)
      [ 7.831420] [<c005f2a8>] (atomic_notifier_call_chain+0x14/0x18) from [<c0378078>] (power_supply_changed_work+0x6c/0xb8)
      [ 7.842864] [<c0378078>] (power_supply_changed_work+0x6c/0xb8) from [<c00556c0>] (process_one_work+0x248/0x440)
      [ 7.853546] [<c00556c0>] (process_one_work+0x248/0x440) from [<c0055d6c>] (worker_thread+0x208/0x350)
      [ 7.863372] [<c0055d6c>] (worker_thread+0x208/0x350) from [<c005b0ac>] (kthread+0xc8/0xdc)
      [ 7.872131] [<c005b0ac>] (kthread+0xc8/0xdc) from [<c000e138>] (ret_from_fork+0x14/0x3c)
      
      Fixes: 32260308 ("bq2415x_charger: Use power_supply notifier for automode")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NSebastian Reichel <sre@kernel.org>
      3c018504
  2. 30 5月, 2014 1 次提交
  3. 27 5月, 2014 1 次提交
  4. 24 5月, 2014 1 次提交
  5. 23 5月, 2014 1 次提交
  6. 16 5月, 2014 1 次提交
    • P
      mfd: vexpress: Convert custom func API to regmap · 3b9334ac
      Pawel Moll 提交于
      Components of the Versatile Express platform (configuration
      microcontrollers on motherboard and daughterboards in particular)
      talk to each other over a custom configuration bus. They
      provide miscellaneous functions (from clock generator control
      to energy sensors) which are represented as platform devices
      (and Device Tree nodes). The transactions on the bus can
      be generated by different "bridges" in the system, some
      of which are universal for the whole platform (for the price
      of high transfer latencies), others restricted to a subsystem
      (but much faster).
      
      Until now drivers for such functions were using custom "func"
      API, which is being replaced in this patch by regmap calls.
      This required:
      
      * a rework (and move to drivers/bus directory, as suggested
        by Samuel and Arnd) of the config bus core, which is much
        simpler now and uses device model infrastructure (class)
        to keep track of the bridges; non-DT case (soon to be
        retired anyway) is simply covered by a special device
        registration function
      
      * the new config-bus driver also takes over device population,
        so there is no need for special matching table for
        of_platform_populate nor "simple-bus" hack in the arm64
        model dtsi file (relevant bindings documentation has
        been updated); this allows all the vexpress devices
        fit into normal device model, making it possible
        to remove plenty of early inits and other hacks in
        the near future
      
      * adaptation of the syscfg bridge implementation in the
        sysreg driver, again making it much simpler; there is
        a special case of the "energy" function spanning two
        registers, where they should be both defined in the tree
        now, but backward compatibility is maintained in the code
      
      * modification of the relevant drivers:
      
        * hwmon - just a straight-forward API change
        * power/reset driver - API change
        * regulator - API change plus error handling
          simplification
        * osc clock driver - this one required larger rework
          in order to turn in into a standard platform driver
      Signed-off-by: NPawel Moll <pawel.moll@arm.com>
      Acked-by: NMark Brown <broonie@linaro.org>
      Acked-by: NLee Jones <lee.jones@linaro.org>
      Acked-by: NGuenter Roeck <linux@roeck-us.net>
      Acked-by: NMike Turquette <mturquette@linaro.org>
      3b9334ac
  7. 25 4月, 2014 1 次提交
    • P
      power/reset: vexpress: Fix restart/power off operation · d08b8037
      Pawel Moll 提交于
      The restart/power off implementation in the vexpress driver
      used to obtain the config function when necessary. This was
      wrong in two respects:
      
      1. It required memory allocation with disabled interrupts
      (it worked, but lockdep - when enabled - reported warnings).
      
      2. Used jiffies-based timeout, while jiffies are not running
      at this stage of system shutdown (therefore a config
      transaction error - if happened - would have never be reported).
      
      Fixed by pre-allocating the config function per device
      and using mdelay for timeout.
      Signed-off-by: NPawel Moll <pawel.moll@arm.com>
      d08b8037
  8. 23 4月, 2014 1 次提交
  9. 04 3月, 2014 1 次提交
  10. 13 2月, 2014 1 次提交
  11. 02 2月, 2014 1 次提交
    • K
      power: max17040: Fix NULL pointer dereference when there is no platform_data · ac323d8d
      Krzysztof Kozlowski 提交于
      Fix NULL pointer dereference of "chip->pdata" if platform_data was not
      supplied to the driver.
      
      The driver during probe stored the pointer to the platform_data:
      	chip->pdata = client->dev.platform_data;
      Later it was dereferenced in max17040_get_online() and
      max17040_get_status().
      
      If platform_data was not supplied, the NULL pointer exception would
      happen:
      
      [    6.626094] Unable to handle kernel  of a at virtual address 00000000
      [    6.628557] pgd = c0004000
      [    6.632868] [00000000] *pgd=66262564
      [    6.634636] Unable to handle kernel paging request at virtual address e6262000
      [    6.642014] pgd = de468000
      [    6.644700] [e6262000] *pgd=00000000
      [    6.648265] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
      [    6.653552] Modules linked in:
      [    6.656598] CPU: 0 PID: 31 Comm: kworker/0:1 Not tainted 3.10.14-02717-gc58b4b4 #505
      [    6.664334] Workqueue: events max17040_work
      [    6.668488] task: dfa11b80 ti: df9f6000 task.ti: df9f6000
      [    6.673873] PC is at show_pte+0x80/0xb8
      [    6.677687] LR is at show_pte+0x3c/0xb8
      [    6.681503] pc : [<c001b7b8>]    lr : [<c001b774>]    psr: 600f0113
      [    6.681503] sp : df9f7d58  ip : 600f0113  fp : 00000009
      [    6.692965] r10: 00000000  r9 : 00000000  r8 : dfa11b80
      [    6.698171] r7 : df9f7ea0  r6 : e6262000  r5 : 00000000  r4 : 00000000
      [    6.704680] r3 : 00000000  r2 : e6262000  r1 : 600f0193  r0 : c05b3750
      [    6.711194] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      [    6.718485] Control: 10c53c7d  Table: 5e46806a  DAC: 00000015
      [    6.724218] Process kworker/0:1 (pid: 31, stack limit = 0xdf9f6238)
      [    6.730465] Stack: (0xdf9f7d58 to 0xdf9f8000)
      [    6.914325] [<c001b7b8>] (show_pte+0x80/0xb8) from [<c047107c>] (__do_kernel_fault.part.9+0x44/0x74)
      [    6.923425] [<c047107c>] (__do_kernel_fault.part.9+0x44/0x74) from [<c001bb7c>] (do_page_fault+0x2c4/0x360)
      [    6.933144] [<c001bb7c>] (do_page_fault+0x2c4/0x360) from [<c0008400>] (do_DataAbort+0x34/0x9c)
      [    6.941825] [<c0008400>] (do_DataAbort+0x34/0x9c) from [<c000e5d8>] (__dabt_svc+0x38/0x60)
      [    6.950058] Exception stack(0xdf9f7ea0 to 0xdf9f7ee8)
      [    6.955099] 7ea0: df0c1790 00000000 00000002 00000000 df0c1794 df0c1790 df0c1790 00000042
      [    6.963271] 7ec0: df0c1794 00000001 00000000 00000009 00000000 df9f7ee8 c0306268 c0306270
      [    6.971419] 7ee0: a00f0113 ffffffff
      [    6.974902] [<c000e5d8>] (__dabt_svc+0x38/0x60) from [<c0306270>] (max17040_work+0x8c/0x144)
      [    6.983317] [<c0306270>] (max17040_work+0x8c/0x144) from [<c003f364>] (process_one_work+0x138/0x440)
      [    6.992429] [<c003f364>] (process_one_work+0x138/0x440) from [<c003fa64>] (worker_thread+0x134/0x3b8)
      [    7.001628] [<c003fa64>] (worker_thread+0x134/0x3b8) from [<c00454bc>] (kthread+0xa4/0xb0)
      [    7.009875] [<c00454bc>] (kthread+0xa4/0xb0) from [<c000eb28>] (ret_from_fork+0x14/0x2c)
      [    7.017943] Code: e1a03005 e2422480 e0826104 e59f002c (e7922104)
      [    7.024017] ---[ end trace 73bc7006b9cc5c79 ]---
      Signed-off-by: NKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Fixes: c6f4a42d
      Cc: <stable@vger.kernel.org>
      ac323d8d
  12. 25 1月, 2014 2 次提交
  13. 16 1月, 2014 1 次提交
  14. 24 12月, 2013 11 次提交
  15. 02 12月, 2013 3 次提交
    • P
      power_supply: Add power_supply notifier · d36240d2
      Pali Rohár 提交于
      This patch adds a notifier chain to the power_supply, this helps drivers
      in other subsystem to listen to changes in power supply subsystem.
      
      This would help to take some actions in those drivers on changing the
      power supply properties. One such scenario is to increase/decrease system
      performance based on the battery capacity/voltage. Another scenario is to
      adjust the h/w peak current detection voltage/current thresholds based on
      battery voltage/capacity. The notifier helps drivers to listen to changes
      in power_suppy susbystem without polling the power_supply properties
      Signed-off-by: NJenny TC <jenny.tc@intel.com>
      Signed-off-by: NPali Rohár <pali.rohar@gmail.com>
      Acked-by: NJenny TC <jenny.tc@intel.com>
      Signed-off-by: NAnton Vorontsov <anton@enomsg.org>
      d36240d2
    • A
      max17042_battery: Fix build errors caused by missing REGMAP_I2C config · 93353e80
      Austin Boyle 提交于
      max17042 now uses regmap interface but does not enable config option. This
      patch fixes the following build errors:
      
      drivers/power/max17042_battery.c:661:15: error: variable ‘max17042_regmap_config’ has initializer but incomplete type
      drivers/power/max17042_battery.c:662:2: error: unknown field ‘reg_bits’ specified in initializer
      drivers/power/max17042_battery.c:662:2: warning: excess elements in struct initializer
      drivers/power/max17042_battery.c:662:2: warning: (near initialization for ‘max17042_regmap_config’)
      drivers/power/max17042_battery.c:663:2: error: unknown field ‘val_bits’ specified in initializer
      drivers/power/max17042_battery.c:663:2: warning: excess elements in struct initializer
      drivers/power/max17042_battery.c:663:2: warning: (near initialization for ‘max17042_regmap_config’)
      drivers/power/max17042_battery.c:664:2: error: unknown field ‘val_format_endian’ specified in initializer
      drivers/power/max17042_battery.c:664:23: error: ‘REGMAP_ENDIAN_NATIVE’ undeclared here (not in a function)
      drivers/power/max17042_battery.c:664:2: warning: excess elements in struct initializer
      drivers/power/max17042_battery.c:664:2: warning: (near initialization for ‘max17042_regmap_config’)
      drivers/power/max17042_battery.c: In function ‘max17042_probe’:
      drivers/power/max17042_battery.c:684:2: error: implicit declaration of function ‘devm_regmap_init_i2c’
      Signed-off-by: NAustin Boyle <boyle.austin@gmail.com>
      Acked-by: NJonghwa Lee <jonghwa3.lee@samsung.com>
      Signed-off-by: NAnton Vorontsov <anton@enomsg.org>
      93353e80
    • S
      power_supply: Fix Oops from NULL pointer dereference from wakeup_source_activate · 80c6463e
      Shuah Khan 提交于
      power_supply_register() calls device_init_wakeup() to register a wakeup
      source before initializing dev_name. As a result, device_wakeup_enable()
      end up registering wakeup source with a null name when
      wakeup_source_register() gets called with dev_name(dev) which is null at
      the time.
      
      When kernel is booted with wakeup_source_activate enabled, it will panic
      when the trace point code tries to dereference ws->name.
      
      Fixed the problem by moving up the kobject_set_name() call prior to
      accesses to dev_name(). Replaced kobject_set_name() with dev_set_name()
      which is the right interface to be called from drivers. Fixed the call to
      device_del() prior to device_add() in for wakeup_init_failed error
      handling code.
      
      Trace after the change:
      
                  bash-2143  [003] d...   132.280697: wakeup_source_activate: BAT1 state=0x20001
           kworker/3:2-1169  [003] d...   132.281305: wakeup_source_deactivate: BAT1 state=0x30000
      
      Oops message:
      
      [  819.769934] device: 'BAT1': device_add
      [  819.770078] PM: Adding info for No Bus:BAT1
      [  819.770235] BUG: unable to handle kernel NULL pointer dereference at           (null)
      [  819.770435] IP: [<ffffffff813381c0>] skip_spaces+0x30/0x30
      [  819.770572] PGD 3efd90067 PUD 3eff61067 PMD 0
      [  819.770716] Oops: 0000 [#1] SMP
      [  819.770829] Modules linked in: arc4 iwldvm mac80211 x86_pkg_temp_thermal coretemp kvm_intel joydev i915 kvm uvcvideo ghash_clmulni_intel videobuf2_vmalloc aesni_intel videobuf2_memops videobuf2_core aes_x86_64 ablk_helper cryptd videodev iwlwifi lrw rfcomm gf128mul glue_helper bnep btusb media bluetooth parport_pc hid_generic ppdev snd_hda_codec_hdmi drm_kms_helper snd_hda_codec_realtek cfg80211 drm tpm_infineon samsung_laptop snd_hda_intel usbhid snd_hda_codec hid snd_hwdep snd_pcm microcode snd_page_alloc snd_timer psmouse i2c_algo_bit lpc_ich tpm_tis video wmi mac_hid serio_raw ext2 lp parport r8169 mii
      [  819.771802] CPU: 0 PID: 2167 Comm: bash Not tainted 3.12.0+ #25
      [  819.771876] Hardware name: SAMSUNG ELECTRONICS CO., LTD. 900X3C/900X3D/900X4C/900X4D/SAMSUNG_NP1234567890, BIOS P03AAC 07/12/2012
      [  819.772022] task: ffff88002e6ddcc0 ti: ffff8804015ca000 task.ti: ffff8804015ca000
      [  819.772119] RIP: 0010:[<ffffffff813381c0>]  [<ffffffff813381c0>] skip_spaces+0x30/0x30
      [  819.772242] RSP: 0018:ffff8804015cbc70  EFLAGS: 00010046
      [  819.772310] RAX: 0000000000000003 RBX: ffff88040cfd6d40 RCX: 0000000000000018
      [  819.772397] RDX: 0000000000020001 RSI: 0000000000000000 RDI: 0000000000000000
      [  819.772484] RBP: ffff8804015cbcc0 R08: 0000000000000000 R09: ffff8803f0768d40
      [  819.772570] R10: ffffea001033b800 R11: 0000000000000000 R12: ffffffff81c519c0
      [  819.772656] R13: 0000000000020001 R14: 0000000000000000 R15: 0000000000020001
      [  819.772744] FS:  00007ff98309b740(0000) GS:ffff88041f200000(0000) knlGS:0000000000000000
      [  819.772845] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  819.772917] CR2: 0000000000000000 CR3: 00000003f59dc000 CR4: 00000000001407f0
      [  819.773001] Stack:
      [  819.773030]  ffffffff81114003 ffff8804015cbcb0 0000000000000000 0000000000000046
      [  819.773146]  ffff880409757a18 ffff8803f065a160 0000000000000000 0000000000020001
      [  819.773273]  0000000000000000 0000000000000000 ffff8804015cbce8 ffffffff8143e388
      [  819.773387] Call Trace:
      [  819.773434]  [<ffffffff81114003>] ? ftrace_raw_event_wakeup_source+0x43/0xe0
      [  819.773520]  [<ffffffff8143e388>] wakeup_source_report_event+0xb8/0xd0
      [  819.773595]  [<ffffffff8143e3cd>] __pm_stay_awake+0x2d/0x50
      [  819.773724]  [<ffffffff8153395c>] power_supply_changed+0x3c/0x90
      [  819.773795]  [<ffffffff8153407c>] power_supply_register+0x18c/0x250
      [  819.773869]  [<ffffffff813d8d18>] sysfs_add_battery+0x61/0x7b
      [  819.773935]  [<ffffffff813d8d69>] battery_notify+0x37/0x3f
      [  819.774001]  [<ffffffff816ccb7c>] notifier_call_chain+0x4c/0x70
      [  819.774071]  [<ffffffff81073ded>] __blocking_notifier_call_chain+0x4d/0x70
      [  819.774149]  [<ffffffff81073e26>] blocking_notifier_call_chain+0x16/0x20
      [  819.774227]  [<ffffffff8109397a>] pm_notifier_call_chain+0x1a/0x40
      [  819.774316]  [<ffffffff81095b66>] hibernate+0x66/0x1c0
      [  819.774407]  [<ffffffff81093931>] state_store+0x71/0xa0
      [  819.774507]  [<ffffffff81331d8f>] kobj_attr_store+0xf/0x20
      [  819.774613]  [<ffffffff811f8618>] sysfs_write_file+0x128/0x1c0
      [  819.774735]  [<ffffffff8118579d>] vfs_write+0xbd/0x1e0
      [  819.774841]  [<ffffffff811861d9>] SyS_write+0x49/0xa0
      [  819.774939]  [<ffffffff816d1052>] system_call_fastpath+0x16/0x1b
      [  819.775055] Code: 89 f8 48 89 e5 f6 82 c0 a6 84 81 20 74 15 0f 1f 44 00 00 48 83 c0 01 0f b6 10 f6 82 c0 a6 84 81 20 75 f0 5d c3 66 0f 1f 44 00 00 <80> 3f 00 55 48 89 e5 74 15 48 89 f8 0f 1f 40 00 48 83 c0 01 80
      [  819.775760] RIP  [<ffffffff813381c0>] skip_spaces+0x30/0x30
      [  819.775881]  RSP <ffff8804015cbc70>
      [  819.775949] CR2: 0000000000000000
      [  819.794175] ---[ end trace c4ef25127039952e ]---
      Signed-off-by: NShuah Khan <shuah.kh@samsung.com>
      Acked-by: NAnton Vorontsov <anton@enomsg.org>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: NAnton Vorontsov <anton@enomsg.org>
      80c6463e
  16. 15 11月, 2013 1 次提交
  17. 13 11月, 2013 2 次提交
  18. 26 10月, 2013 4 次提交