27 Aug, 2013
25 commits
-
The driver now supports the chips pca9633 and pca9634, therefore we
rename the files to more generic and meaningul namesSigned-off-by: Ricardo Ribalda Delgado
Signed-off-by: Bryan Wu -
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 -
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 -17Signed-off-by: Ricardo Ribalda Delgado
Signed-off-by: Bryan Wu -
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 -
Signed-off-by: Milo Kim
Signed-off-by: Bryan Wu -
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 -
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: 32Pattern 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 -
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 -
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 -
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 -
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: 32Pattern 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 -
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 -
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-onlyCouple 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 -
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 -
__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 -
__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 -
__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 -
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 -
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 -
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_statusKeeping 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 -
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 -
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 -
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 -
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 -
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
26 Aug, 2013
5 commits
-
Pull staging fixes from Greg KH:
"Here are two tiny staging tree fixes (well, one is for an iio driver,
but those updates come through the staging tree due to dependancies)One fixes a problem with an IIO driver, and the other fixes a bug in
the comedi driver core"* tag 'staging-3.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
staging: comedi: bug-fix NULL pointer dereference on failed attach
iio: adjd_s311: Fix non-scan mode data read -
Pull USB fixes from Greg KH:
"Here are two USB fixes for 3.11-rc7One fixes a reported regression in the OHCI driver, and the other
fixes a reported build breakage in the USB phy drivers"* tag 'usb-3.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
usb: phy: fix build breakage
USB: OHCI: add missing PCI PM callbacks to ohci-pci.c -
Pull ARM fixes from Russell King:
"This round of fixes is smaller than previous: a couple more updates
for the security fixes, and a one-liner kexec fix"* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: 7816/1: CONFIG_KUSER_HELPERS: fix help text
ARM: 7815/1: kexec: offline non panic CPUs on Kdump panic
ARM: 7819/1: fiq: Cast the first argument of flush_icache_range() -
Pull vfs fixes from Al Viro:
"Assorted fixes from the last week or so"* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
VFS: collect_mounts() should return an ERR_PTR
bfs: iget_locked() doesn't return an ERR_PTR
efs: iget_locked() doesn't return an ERR_PTR()
proc: kill the extra proc_readfd_common()->dir_emit_dots()
cope with potentially long ->d_dname() output for shmem/hugetlb
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" -
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 -
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 -
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 -
iget_locked() returns a NULL on error, it doesn't return an ERR_PTR.
Signed-off-by: Dan Carpenter
Signed-off-by: Al Viro -
The iget_locked() function returns NULL on error and never an ERR_PTR.
Signed-off-by: Dan Carpenter
Signed-off-by: Al Viro -
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 -
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
24 Aug, 2013
2 commits
-
Pull libata fixes from Tejun Heo:
"This contains three commits all of which are updates for specific
devices which aren't too widespread. Pretty limited scope and nothing
too interesting or dangerous"* 'for-3.11-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
sata_fsl: save irqs while coalescing
libata: apply behavioral quirks to sil3826 PMP
sata, highbank: fix ordering of SGPIO signals -
Pull cgroup fix from Tejun Heo:
"A late fix for cgroup.This fixes a behavior regression visible to userland which was created
by a commit merged during -rc1. While the behavior change isn't too
likely to be noticeable, the fix is relatively low risk and we'll need
to backport it through -stable anyway if the bug gets released"* 'for-3.11-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
cpuset: fix a regression in validating config change