27 Aug, 2013

25 commits

  • The driver now supports the chips pca9633 and pca9634, therefore we
    rename the files to more generic and meaningul names

    Signed-off-by: Ricardo Ribalda Delgado
    Signed-off-by: Bryan Wu

    Ricardo Ribalda Delgado
     
  • To update an LED a register has to be read, updated and writen. If
    another LED whas been updated at the same time, this could lead into
    wrong updates.

    This patch adds a common mutex to all the leds of the same chip to
    protect the ledout register.

    Signed-off-by: Ricardo Ribalda Delgado
    Signed-off-by: Bryan Wu

    Ricardo Ribalda Delgado
     
  • If there is more than one pca963x chips on the system and there are
    some LEDs without platform_data names, the driver wont be able to
    provide unique naming to them.

    This will cause led_class_dev_register to fail, unregistering all the
    LEDs of the chip.

    This patch adds the i2c address to the name of the unnamed LEDs, making
    them unique.

    [ 555.346827] ------------[ cut here ]------------
    [ 555.346844] WARNING: at /build/linux-voe0Su/linux-3.9.8/fs/sysfs/dir.c:536 sysfs_add_one+0x8b/0x9d()
    [ 555.346847] Hardware name: QT5022
    [ 555.346850] sysfs: cannot create duplicate filename '/class/leds/pca9633:6'
    [ 555.346853] Modules linked in: qt5038_platform(O+) leds_pca9633(O) hid_generic ledtrig_default_on rfcomm bnep bluetooth binfmt_misc nfsd auth_rpcgss nfs_acl nfs lockd dns_resolver fscache sunrpc nls_utf8 nls_cp437 vfat fat loop fuse joydev hid_multitouch usbhid hid acpi_cpufreq mperf kvm_amd kvm evdev pn533 nfc arc4 microcode pcspkr efivars k10temp ath9k ath9k_common ath9k_hw ath fglrx(PO) mac80211 cfg80211 video rfkill processor thermal_sys sp5100_tco button i2c_piix4 ext4 crc16 jbd2 mbcache sg sd_mod crc_t10dif ahci libahci igb i2c_algo_bit i2c_core dca ptp pps_core ehci_pci ohci_hcd ehci_hcd libata usbcore usb_common scsi_mod [last unloaded: leds_pca963x]
    [ 555.346940] Pid: 4766, comm: insmod Tainted: P W O 3.9-1-amd64 #1 Debian 3.9.8-1
    [ 555.346943] Call Trace:
    [ 555.346956] [] ? warn_slowpath_common+0x76/0x8c
    [ 555.346962] [] ? warn_slowpath_fmt+0x47/0x49
    [ 555.346968] [] ? sysfs_pathname+0x3b/0x41
    [ 555.346973] [] ? sysfs_add_one+0x8b/0x9d
    [ 555.346978] [] ? sysfs_do_create_link_sd+0xe8/0x174
    [ 555.346985] [] ? device_add+0x243/0x5ab
    [ 555.346991] [] ? complete_all+0x31/0x40
    [ 555.346998] [] ? init_timer_key+0xc/0x56
    [ 555.347004] [] ? device_create_vargs+0x82/0xb6
    [ 555.347009] [] ? device_create+0x2f/0x31
    [ 555.347014] [] ? should_resched+0x5/0x23
    [ 555.347021] [] ? led_classdev_register+0x24/0x103
    [ 555.347028] [] ? pca9633_probe+0x173/0x239 [leds_pca9633]
    [ 555.347035] [] ? __driver_attach+0x73/0x73
    [ 555.347049] [] ? i2c_device_probe+0x63/0x88 [i2c_core]
    [ 555.347057] [] ? driver_probe_device+0x92/0x1b0
    [ 555.347064] [] ? bus_for_each_drv+0x43/0x7d
    [ 555.347070] [] ? device_attach+0x68/0x83
    [ 555.347078] [] ? bus_probe_device+0x25/0x8d
    [ 555.347083] [] ? device_add+0x3ea/0x5ab
    [ 555.347088] [] ? complete_all+0x31/0x40
    [ 555.347094] [] ? init_timer_key+0xc/0x56
    [ 555.347104] [] ? i2c_new_device+0x10d/0x179 [i2c_core]
    [ 555.347112] [] ? qt5038_init+0x36/0x1000 [qt5038_platform]
    [ 555.347119] [] ? 0xffffffffa008efff
    [ 555.347125] [] ? do_one_initcall+0x74/0x128
    [ 555.347131] [] ? 0xffffffffa008efff
    [ 555.347137] [] ? load_module+0x1af7/0x1dfc
    [ 555.347144] [] ? free_notes_attrs+0x3c/0x3c
    [ 555.347150] [] ? sys_init_module+0x9e/0xab
    [ 555.347157] [] ? system_call_fastpath+0x16/0x1b
    [ 555.347161] ---[ end trace ad00b85794e0de4d ]---
    [ 555.347448] leds-pca9633: probe of 0-006b failed with error -17

    Signed-off-by: Ricardo Ribalda Delgado
    Signed-off-by: Bryan Wu

    Ricardo Ribalda Delgado
     
  • Add support for PCA9634 chip, which belongs to the same family as the
    9633 but with support for 8 outputs instead of 4.

    Signed-off-by: Ricardo Ribalda Delgado
    Signed-off-by: Bryan Wu

    Ricardo Ribalda Delgado
     
  • Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • Now, all legacy application interfaces are restored.
    Each driver documentation is updated.

    Cc: Pali Rohár
    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • This patch reduces the number of programming commands.

    (Count of sending commands)
    Old code: 32 + program size (32 counts for clearing program memory)
    New code: 32

    Pattern buffer is initialized to 0 in this function.
    Just update new program data and remaining buffers are filled with 0.
    So it's needless to clear whole area.

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • git commit db6eaf8388a413a5ee1b4547ce78506b9c6456b0
    (leds-lp5523: use generic firmware interface) causes an application conflict.
    This interface should be maintained for compatibility.

    Restored device attributes are 'engineN_mode', 'engineN_load' and
    'engineN_leds'. (N = 1, 2 or 3)
    A 'selftest' attribute macro is replaced with LP55xx common macro.
    Those are accessed when a LED pattern is run by an application.

    Use a mutex in lp5523_update_program_memory()
    : This function is called when an user-application writes a 'engineN_load' file
    or pattern data is loaded from generic firmware interface.
    So, writing program memory should be protected.
    If an error occurs on accessing this area, just it returns as -EINVAL quickly.
    This error code is exact same as old driver function, lp5523_do_store_load()
    because it should be kept for an user-application compatibility.
    Even the driver is changed, we can use the application without re-compiling
    sources.

    Reported-by: Pali Rohár
    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • LED MUX start and stop address should be updated in the program memory
    on LP5523 initialization.
    LED pattern doesn't work without additional MUX address configuration.
    This handling is done by new function, lp5523_init_program_engine().
    Eventually, it's called during device initialization, lp5523_post_init_device().

    This is a conflict after git commit 632418bf65503405df3f9a6a1616f5a95f91db85
    (leds-lp5523: clean up lp5523_configure()).
    So it should be fixed.

    Cc: Pali Rohár
    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • lp5523_load_engine()
    It is called whenever the operation mode is changed to 'load'.
    It is used for simple operation mode change.
    It will be used when engine mode and LED selection is updated in later patch.

    lp5523_load_engine_and_select_page()
    Change the operation mode to 'load' and select program page number.
    This is used for programming a LED pattern at a time.
    So load_engine() is replaced with new API, load_engine_and_select_page()
    in lp5523_firmware_loaded().

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • This patch reduces the number of programming commands.

    (Count of sending commands)
    Old code: 32 + program size (32 counts for clearing program memory)
    New code: 32

    Pattern buffer is initialized to 0 in this function.
    Just update new program data and remaining buffers are filled with 0.
    So it's needless to clear whole area.

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • git commit 9ce7cb170f97f83a78dc948bf7d25690f15e1328
    may cause an application confict, engineN_mode and engineN_load.
    This interface should be maintained for compatibility.

    Restored device attributes are 'engineN_mode' and 'engineN_load'.
    A 'selftest' attribute macro is replaced with LP55xx common macro.

    Use a mutex in lp5521_update_program_memory()
    : This function is called when an user-application writes a 'engineN_load' file
    or pattern data is loaded from generic firmware interface.
    So, writing program memory should be protected.
    If an error occurs on accessing this area, just it returns as -EINVAL quickly.
    This error code is exact same as old driver function, lp5521_do_store_load()
    because it should be kept for an user-application compatibility.
    Even the driver is changed, we can use the application without re-compiling
    sources.

    'led_pattern' attribute is not included
    : engineN_mode and _load were created for custom user-application.
    'led_pattern' is an exception. I added this attribute not for custom application
    but for simple test. Now it is used only in LP5562 driver, not LP5521.

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • This patch provides common macros for LP5521 and LP5523 device attributes and
    functions.

    (Device attributes)
    LP5521: 'mode', 'load' and 'selftest'
    LP5523: 'mode', 'load', 'leds' and 'selftest'

    (Permissions)
    mode: R/W
    load: Write-only
    leds: R/W
    selftest: Read-only

    Couple of lines are duplicate, so use these macros for adding device attributes
    in LP5521 and LP5523 drivers.

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • LP55xx family devices have internal three program engines which are used for
    loading LED patterns. To maintain legacy device attributes, specific data
    structure is used, 'mode' and 'led_mux'. The mode is used for showing/storing
    current engine mode such like disabled, load and run. Then led_mux is used for
    showing/storing current output LED selection.

    This is only for LP5523/55231.

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Milo Kim
     
  • __initdata should be placed between the variable name and equal
    sign for the variable to be placed in the intended section.
    Fix the example.

    Signed-off-by: Sachin Kamat
    Signed-off-by: Bryan Wu

    Sachin Kamat
     
  • __initdata should be placed between the variable name and equal
    sign for the variable to be placed in the intended section.

    Signed-off-by: Sachin Kamat
    Cc: Dave Hansen
    Signed-off-by: Bryan Wu

    Sachin Kamat
     
  • __initdata should be placed between the variable name and equal
    sign for the variable to be placed in the intended section.

    Signed-off-by: Sachin Kamat
    Cc: Márton Németh
    Signed-off-by: Bryan Wu

    Sachin Kamat
     
  • With the DT conversion, the board Kconfig symbols MACH_ are going to be
    removed. In order to prepare this removal, this patch replaces alls the
    machines dependencies for leds-netxbig by ARCH_KIRKWOOD.

    Signed-off-by: Simon Guinot
    Acked-by: Jason Cooper
    Signed-off-by: Bryan Wu

    Simon Guinot
     
  • With the DT conversion, the board Kconfig symbols MACH_ are going to be
    removed. In order to prepare this removal, this patch replaces alls the
    machines dependencies for leds-ns2 by ARCH_KIRKWOOD.

    Signed-off-by: Simon Guinot
    Acked-by: Jason Cooper
    Signed-off-by: Bryan Wu

    Simon Guinot
     
  • Fix a warning from "sparse":

    drivers/leds/leds-lp3944.c:292:23: warning: mixing different enum types
    drivers/leds/leds-lp3944.c:292:23: int enum led_brightness versus
    drivers/leds/leds-lp3944.c:292:23: int enum lp3944_status

    Keeping track of LP3944_LED_STATUS_OFF and LP3944_LED_STATUS_ON only in
    lp3944_led_set_brightness() is OK, as the handling of DIM (blinking)
    mode[s] is in lp3944_led_set_blink().

    Reported-by: Dan Carpenter
    Signed-off-by: Antonio Ospite
    Reviewed-by: Jingoo Han
    Signed-off-by: Bryan Wu

    Antonio Ospite
     
  • nasgpio_led_get_attr() is used only in this file.
    Fix the following sparse warning:

    drivers/leds/leds-ss4200.c:200:5: warning: symbol 'nasgpio_led_get_attr' was not declared. Should it be static?

    Signed-off-by: Jingoo Han
    Signed-off-by: Bryan Wu

    Jingoo Han
     
  • Use the wrapper function for retrieving the platform data instead of
    accessing dev->platform_data directly.

    Signed-off-by: Jingoo Han
    Signed-off-by: Bryan Wu

    Jingoo Han
     
  • Add hardware blinking support to the pca9633 driver.

    NOTE: Hardware blinking violates the leds infrastructure
    driver interface since the hardware only supports
    blinking all LEDs with the same delay_on/delay_off
    rates. That is, only the LEDs that are set to blink
    will actually blink but all LEDs that are set to blink
    will blink in identical fashion. The delay_on/delay_off
    values of the last LED that is set to blink will be used
    for all of the blinking LEDs. If the hardware doesn't
    support the requested blinking pattern, a default of
    500ms on and off will be used.

    Hardware blinking is disabled by default but can be enabled
    by setting the 'blink_type' member in the platform_data
    struct to 'PCA9633_HW_BLINK' or by adding the 'nxp,hw-blink'
    property to the DTS.

    (fengguang.wu@intel.com: Removes unneeded semicolon.)

    Signed-off-by: Mark A. Greer
    Reported-by: Fengguang Wu
    Signed-off-by: Bryan Wu

    Mark A. Greer
     
  • LP8501 can drive up to 9 channels like LP5523.
    LEDs can be controlled directly via the I2C and programmable engines are
    supported.

    LP55xx common driver
    LP8501 is one of LP55xx family device, so LP55xx common code are used.
    Chip specific data is defined in the structure, 'lp55xx_device_config'.

    Differences between LP8501 and LP5523
    Different register layout for LED output control and others.
    LP8501 specific feature for separate output power selection.
    LP8501 doesn't support external clock detection.
    Different programming engine data.

    LP8501 specific feature - output power selection
    Output channels are selected by power selection - Vout or Vdd.
    Separate power for VDD1-6 and VDD7-9 are available.
    It is configurable in the platform data.
    To support this feature, LP55xx DT structure and header are changed.
    Device tree binding is updated as well.

    LED pattern data
    Example pattern data is updated in the driver documentation.

    Signed-off-by: Milo Kim
    Signed-off-by: Bryan Wu

    Kim, Milo
     
  • Similar to tca6507, we can just parse the standard LED
    properties for pca9633.

    Tested on a pca9632, which is compatible with pca9633.

    Signed-off-by: Tony Lindgren
    Signed-off-by: Bryan Wu

    Tony Lindgren
     

26 Aug, 2013

5 commits


25 Aug, 2013

8 commits

  • Pull ACPI fix from Rafael Wysocki:
    "I really hoped that it wouldn't be necessary to change anything in
    ACPI at this point, but it turns out that we need to revert one more
    ACPI video commit causing trouble.

    This reverts a change in the ACPI video driver that caused the ACPI
    backlight initialization to be carried out even if acpi_backlight=vendor
    is passed in the kernel command line which turns out to break things
    at least on one system"

    * tag 'acpi-3.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    Revert "ACPI / video: Always call acpi_video_init_brightness() on init"

    Linus Torvalds
     
  • Pull SCSI fixes from James Bottomley:
    "This is a set of small bug fixes for lpfc and zfcp and a fix for a
    fairly nasty bug in sg where a process which cancels I/O completes in
    a kernel thread which would then try to write back to the now gone
    userspace and end up writing to a random kernel address instead"

    * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    [SCSI] zfcp: remove access control tables interface (keep sysfs files)
    [SCSI] zfcp: fix schedule-inside-lock in scsi_device list loops
    [SCSI] zfcp: fix lock imbalance by reworking request queue locking
    [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a signal
    [SCSI] lpfc: Don't force CONFIG_GENERIC_CSUM on

    Linus Torvalds
     
  • For a search buffer, 2 byte aligned, strchr() was returning pointer
    outside of buffer (buf - 1)

    ------------->8----------------
    // Input buffer (default 4 byte aigned)
    char *buffer = "1AA_";

    // actual search start (to mimick 2 byte alignment)
    char *current_line = &(buffer[2]);

    // Character to search for
    char c = 'A';

    char *c_pos = strchr(current_line, c);

    printf("%s\n", c_pos) --> 'AA_' as oppose to 'A_'
    ------------->8----------------

    Reported-by: Anton Kolesov
    Debugged-by: Anton Kolesov
    Cc: # [3.9 and 3.10]
    Cc: Noam Camus
    Signed-off-by: Joern Rennecke
    Signed-off-by: Vineet Gupta
    Signed-off-by: Linus Torvalds

    Joern Rennecke
     
  • This should actually be returning an ERR_PTR on error instead of NULL.
    That was how it was designed and all the callers expect it.

    [AV: actually, that's what "VFS: Make clone_mnt()/copy_tree()/collect_mounts()
    return errors" missed - originally collect_mounts() was expected to return
    NULL on failure]

    Cc: # 3.10+
    Signed-off-by: Dan Carpenter
    Signed-off-by: Al Viro

    Dan Carpenter
     
  • iget_locked() returns a NULL on error, it doesn't return an ERR_PTR.

    Signed-off-by: Dan Carpenter
    Signed-off-by: Al Viro

    Dan Carpenter
     
  • The iget_locked() function returns NULL on error and never an ERR_PTR.

    Signed-off-by: Dan Carpenter
    Signed-off-by: Al Viro

    Dan Carpenter
     
  • proc_readfd_common() does dir_emit_dots() twice in a row,
    we need to do this only once.

    Signed-off-by: Oleg Nesterov
    Signed-off-by: Al Viro

    Oleg Nesterov
     
  • dynamic_dname() is both too much and too little for those - the
    output may be well in excess of 64 bytes dynamic_dname() assumes
    to be enough (thanks to ashmem feeding really long names to
    shmem_file_setup()) and vsnprintf() is an overkill for those
    guys.

    Signed-off-by: Al Viro

    Al Viro
     

24 Aug, 2013

2 commits