summaryrefslogtreecommitdiffstats
path: root/drivers/hwmon (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Merge tag 'hwmon-for-linus' of ↵Linus Torvalds2014-08-1415-31/+60
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging Pull hwmon fixes from Guenter Roeck: "Several bug fixes in various drivers, plus a minor cleanup in the tmp103 driver" * tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: hwmon: (tmp103) Remove duplicate test for I2C_FUNC_SMBUS_BYTE_DATA functionality hwmon: (w83793) Fix vrm write operation hwmon: (w83791d) Fix vrm write operation hwmon: (w83627hf) Fix vrm write operation hwmon: (vt1211) Fix vrm write operation hwmon: (pc87360) Fix vrm write operation hwmon: (lm87) Fix vrm write operation hwmon: (asb100) Fix vrm write operation hwmon: (adm1026) Fix vrm write operation hwmon: (adm1025) Fix vrm write operation hwmon: (hih6130) Fix missing hih6130->write_length setting hwmon: (dme1737) Prevent overflow problem when writing large limits hwmon: (emc6w201) Fix temperature limit range hwmon: (ads1015) Fix out-of-bounds array access hwmon: (lm92) Prevent overflow problem when writing large limits
| * hwmon: (tmp103) Remove duplicate test for I2C_FUNC_SMBUS_BYTE_DATA functionalityAxel Lin2014-08-101-7/+0
| | | | | | | | | | | | | | | | | | | | | | | | Since commit b42261078a91 ("regmap: i2c: fallback to SMBus if the adapter does not support standard I2C"), regmap-i2c will check the I2C_FUNC_SMBUS_[BYTE|WORD]_DATA functionality based on the regmap_config setting if the adapter does not support standard I2C. So remove the I2C_FUNC_SMBUS_BYTE_DATA functionality check in the driver code. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (w83793) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (w83791d) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (w83627hf) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (vt1211) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (pc87360) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (lm87) Fix vrm write operationAxel Lin2014-08-061-0/+4
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (asb100) Fix vrm write operationAxel Lin2014-08-061-0/+4
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (adm1026) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (adm1025) Fix vrm write operationAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (hih6130) Fix missing hih6130->write_length settingAxel Lin2014-08-061-0/+3
| | | | | | | | | | | | | | | | | | The hih6130->write_length setting was accidently removed by commit ebc6b9383f3e "hwmon: (hih6130) Convert to devm_hwmon_device_register_with_groups", fix it. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (dme1737) Prevent overflow problem when writing large limitsAxel Lin2014-08-061-15/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On platforms with sizeof(int) < sizeof(long), writing a temperature limit larger than MAXINT will result in unpredictable limit values written to the chip. Avoid auto-conversion from long to int to fix the problem. Voltage limits, fan minimum speed, pwm frequency, pwm ramp rate, and other attributes have the same problem, fix them as well. Zone temperature limits are signed, but were cached as u8, causing unepected values to be reported for negative temperatures. Cache as s8 to fix the problem. vrm is an u8, so the written value needs to be limited to [0, 255]. Signed-off-by: Axel Lin <axel.lin@ingics.com> [Guenter Roeck: Fix zone temperature cache] Cc: stable@vger.kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (emc6w201) Fix temperature limit rangeGuenter Roeck2014-08-061-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Temperature limit range is [-127, 127], not [-127, 128]. The wrong range caused a bad limit to be written into the chip if the limit was set to a value of 128 degrees C or above. Also use DIV_ROUND_CLOSEST instead of a plain divide operation to reduce the rounding error when writing temperature limits. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Jean Delvare <jdelvare@suse.de>
| * hwmon: (ads1015) Fix out-of-bounds array accessAxel Lin2014-08-061-0/+2
| | | | | | | | | | | | | | | | | | | | | | Current code uses data_rate as array index in ads1015_read_adc() and uses pga as array index in ads1015_reg_to_mv, so we must make sure both data_rate and pga settings are in valid value range. Return -EINVAL if the setting is out-of-range. Signed-off-by: Axel Lin <axel.lin@ingics.com> Cc: stable@vger.kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
| * hwmon: (lm92) Prevent overflow problem when writing large limitsAxel Lin2014-08-061-7/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On platforms with sizeof(int) < sizeof(long), writing a temperature limit larger than MAXINT will result in unpredictable limit values written to the chip. Avoid auto-conversion from long to int to fix the problem. The hysteresis temperature range depends on the value of data->temp[attr->index], since val is subtracted from it. Use a wider clamp, [-120000, 220000] should do to cover the possible range. Also add missing TEMP_TO_REG() on writes into cached hysteresis value. Also uses clamp_val to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> [Guenter Roeck: Fixed double TEMP_TO_REG on hysteresis updates] Cc: stable@vger.kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | fs.h, drivers/hwmon/asus_atk0110.c: fix DEFINE_SIMPLE_ATTRIBUTE semicolon ↵Joe Perches2014-08-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | definition and use The DEFINE_SIMPLE_ATTRIBUTE macro should not end in a ; Fix the one use in the kernel tree that did not have a semicolon. Signed-off-by: Joe Perches <joe@perches.com> Acked-by: Guenter Roeck <linux@roeck-us.net> Acked-by: Luca Tettamanti <kronos.it@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | Merge branch 'timers-core-for-linus' of ↵Linus Torvalds2014-08-061-4/+2
|\ \ | |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull timer and time updates from Thomas Gleixner: "A rather large update of timers, timekeeping & co - Core timekeeping code is year-2038 safe now for 32bit machines. Now we just need to fix all in kernel users and the gazillion of user space interfaces which rely on timespec/timeval :) - Better cache layout for the timekeeping internal data structures. - Proper nanosecond based interfaces for in kernel users. - Tree wide cleanup of code which wants nanoseconds but does hoops and loops to convert back and forth from timespecs. Some of it definitely belongs into the ugly code museum. - Consolidation of the timekeeping interface zoo. - A fast NMI safe accessor to clock monotonic for tracing. This is a long standing request to support correlated user/kernel space traces. With proper NTP frequency correction it's also suitable for correlation of traces accross separate machines. - Checkpoint/restart support for timerfd. - A few NOHZ[_FULL] improvements in the [hr]timer code. - Code move from kernel to kernel/time of all time* related code. - New clocksource/event drivers from the ARM universe. I'm really impressed that despite an architected timer in the newer chips SoC manufacturers insist on inventing new and differently broken SoC specific timers. [ Ed. "Impressed"? I don't think that word means what you think it means ] - Another round of code move from arch to drivers. Looks like most of the legacy mess in ARM regarding timers is sorted out except for a few obnoxious strongholds. - The usual updates and fixlets all over the place" * 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (114 commits) timekeeping: Fixup typo in update_vsyscall_old definition clocksource: document some basic timekeeping concepts timekeeping: Use cached ntp_tick_length when accumulating error timekeeping: Rework frequency adjustments to work better w/ nohz timekeeping: Minor fixup for timespec64->timespec assignment ftrace: Provide trace clocks monotonic timekeeping: Provide fast and NMI safe access to CLOCK_MONOTONIC seqcount: Add raw_write_seqcount_latch() seqcount: Provide raw_read_seqcount() timekeeping: Use tk_read_base as argument for timekeeping_get_ns() timekeeping: Create struct tk_read_base and use it in struct timekeeper timekeeping: Restructure the timekeeper some more clocksource: Get rid of cycle_last clocksource: Move cycle_last validation to core code clocksource: Make delta calculation a function wireless: ath9k: Get rid of timespec conversions drm: vmwgfx: Use nsec based interfaces drm: i915: Use nsec based interfaces timekeeping: Provide ktime_get_raw() hangcheck-timer: Use ktime_get_ns() ...
| * hwmon: ibmaem: Use ktime_get_ns()Thomas Gleixner2014-07-241-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Using the wall clock time for delta time calculations is wrong to begin with because wall clock time can be set from userspace and NTP. Such data wants to be based on clock monotonic. The calculations also are done on a nanosecond basis. Use the nanoseconds based interface right away. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Jean Delvare <jdelvare@suse.de> Acked-by: Jean Delvare <jdelvare@suse.de> Signed-off-by: John Stultz <john.stultz@linaro.org>
* | hwmon: (g762) Use of_property_read_u32 at appropriate placeAxel Lin2014-08-041-5/+2
| | | | | | | | | | | | | | Simplify the code a bit and also improve readability. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (sis5595) Prevent overflow problem when writing large limitsAxel Lin2014-08-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | On platforms with sizeof(int) < sizeof(long), writing a temperature limit larger than MAXINT will result in unpredictable limit values written to the chip. Avoid auto-conversion from long to int to fix the problem. Signed-off-by: Axel Lin <axel.lin@ingics.com> Cc: stable@vger.kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (gpio-fan) Prevent overflow problem when writing large limitsAxel Lin2014-08-041-1/+1
| | | | | | | | | | | | | | | | | | | | On platforms with sizeof(int) < sizeof(unsigned long), writing a rpm value larger than MAXINT will result in unpredictable limit values written to the chip. Avoid auto-conversion from unsigned long to int to fix the problem. Signed-off-by: Axel Lin <axel.lin@ingics.com> Cc: stable@vger.kernel.org Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (ibmpowernv) Use of_property_read_u32 at appropriate placeAxel Lin2014-08-041-4/+3
| | | | | | | | | | | | | | | | Simplify the code a bit and also improve readability. Signed-off-by: Axel Lin <axel.lin@ingics.com> Tested-by: Neelesh Gupta <neelegup@linux.vnet.ibm.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (lm85) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-93/+51
| | | | | | | | | | | | | | Use devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (lm85) Avoid forward declarationAxel Lin2014-08-041-263/+250
| | | | | | | | | | | | | | Reorder functions to avoid forward declaration. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (lm78) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-83/+15
| | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (max6697) Use of_property_read_bool at appropriate placesAxel Lin2014-08-041-9/+7
| | | | | | | | | | | | | | This slightly improves readability. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (pwm-fan) Make SENSORS_PWM_FAN depend on OFAxel Lin2014-08-041-1/+1
| | | | | | | | | | | | | | | | | | This driver won't instantiate if OF is not configured, thus add OF dependency. Also add COMPILE_TEST to increase build testing coverage. Signed-off-by: Axel Lin <axel.lin@ingics.com> Reviewed-by: Jean Delvare <jdelvare@suse.de> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (pwm-fan) Remove duplicate dev_set_drvdata callAxel Lin2014-08-041-1/+0
| | | | | | | | | | | | | | | | The dev_set_drvdata() call is equivalent to the platform_set_drvdata() call in next line. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (nct6775) Remove num_attr_groups from struct nct6775_dataAxel Lin2014-08-041-6/+6
| | | | | | | | | | | | | | num_attr_groups is only used in nct6775_probe(), make it to be local variable. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (nct6775) Update module description and Kconfig for NCT6106D and NCT6791DAxel Lin2014-08-042-3/+3
| | | | | | | | | | | | | | | | This driver also supports NCT6106D and NCT6791D, thus update module description and Kconfig accordingly. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (adt7411) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-39/+20
| | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (g762) Convert to hwmon_device_register_with_groupsAxel Lin2014-08-041-44/+27
| | | | | | | | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and hwmon_device_register_with_groups() to simplify the code a bit. Use hwmon_device_register_with_groups rather than the device managed version to ensure g762_of_clock_disable() is called after hwmon_device_unregister(). Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (emc2103) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-63/+26
| | | | | | | | | | | | | | Use devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (smsc47m1) Avoid forward declarationAxel Lin2014-08-041-60/+55
| | | | | | | | | | | | | | Reorder functions to avoid forward declaration. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (smsc47m192) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-52/+25
| | | | | | | | | | | | | | Use devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (smsc47m192) Avoid forward declarationAxel Lin2014-08-041-84/+77
| | | | | | | | | | | | | | Reorder functions to avoid forward declaration. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (max1668) Make max1668_addr_list array constAxel Lin2014-08-041-1/+1
| | | | | | | | | | Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (max6639) Make normal_i2c array constAxel Lin2014-08-041-1/+1
| | | | | | | | | | | | Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Roland Stigge <stigge@antcom.de> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (thmc50) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-53/+25
| | | | | | | | | | | | | | Use devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (thmc50) Avoid forward declarationAxel Lin2014-08-041-84/+76
| | | | | | | | | | | | | | Reorder functions to avoid forward declaration. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (adt7470) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-55/+42
| | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (adt7470) Avoid forward declarationAxel Lin2014-08-041-36/+30
| | | | | | | | | | | | | | Reorder functions to avoid forward declaration. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (adt7462) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-64/+42
| | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (adt7462) Avoid forward declarationAxel Lin2014-08-041-24/+18
| | | | | | | | | | | | | | Reorder functions to avoid forward declaration. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: Add pwm-fan driverKamil Debski2014-08-043-0/+206
| | | | | | | | | | | | | | | | | | | | | | | | The pwm-fan driver enables control of fans connected to PWM lines. This driver uses the PWM framework, so it is compatible with all PWM devices that provide drivers through the PWM framework. Signed-off-by: Kamil Debski <k.debski@samsung.com> Reviewed-by: Varka Bhadram <varkabhadram@gmail.com> Reviewed-by: Tobias Klauser <tklauser@distanz.ch> [Guenter Roeck: Last argument to devm_of_pwm_get is pointer, use NULL] Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (asc7621) Make map tables constAxel Lin2014-08-041-7/+7
| | | | | | | | | | | | | | | | Map tables are never changed, so it is safe to make them const. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: George Joseph <george.joseph@fairview5.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (ds620) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-43/+17
| | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (max16065) Use PTR_ERR_OR_ZEROAxel Lin2014-08-041-4/+1
| | | | | | | | | | Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
* | hwmon: (sht21) Convert to devm_hwmon_device_register_with_groupsAxel Lin2014-08-041-60/+22
| | | | | | | | | | | | | | | | Use ATTRIBUTE_GROUPS macro and devm_hwmon_device_register_with_groups() to simplify the code a bit. Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Guenter Roeck <linux@roeck-us.net>