hwmon patches for 3.4-rc2
Fix crash in ad7314 driver Add support for AMD Trinity CPUs to k10temp driver Fix __initdata/__initconst mixup in w83627ehf driver Fix runtime warnings in acpi_power_meter and max6639 drivers Fix build warnings in adm1031, f75375s, sht15, and gpio-fan drivers -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQIcBAABAgAGBQJPfFUnAAoJEMsfJm/On5mBs+0P/3W6ZulnDdj97xXKzSHpdQr+ y9rRNPAmJTGmtMe5t8ZvncMV4ZSzhV3CjW1qSyZON/4UsREcMYRAOSHuM9ZFPGqI oI4nSbMS+KfZtYOp5ehvHhYctaYDmAEArHsUbqDxWF6k1xruwTNpaDGnrZM7tc1a +Sm3rZFiGvAcJVtjoixpaQXsyFLY9zmD1+cdHhM1Adh7BwFnNpbb5an8rJBw+rBO /fy6FeAOkDug/apmmD/IBZutIFuHw85dVE9x7qJ4nj+8btPik7/AfKjR9NrQ5d24 ivo4IjRFueCMqwMQJRg0lfuLHrMtVPno68u0HVYVQN88B/njkJayB+ArPbM2O0kH BiIHLi/JFEd5eviUX8UstW43PKdU/gll92vYoSED7p3Ldx+nywdMC3afe2GtN/k/ dP51EgCZnhGFapAqLkW7uek+KWyeITSj3Dk5tAUIGpcJ+eSefCErNtI5IoxnoE1M H4XxyzFZTp6dR1KCH2M6aBCFxMNRXh84zVhNGnBUdmfFyT19Ahx6wh8qeeEL/rrR c7IVMbgXkc7DwD1l8aIAXag76lgCkHFnIRfhNwiIGGCs1GsdeUtSLclcC000DImc 8VuNAg4VUTiyuMuElqRPWR9laRRBzUAFa53ZZEuoISKyKbAWxGmi7MyI7uZdZ58w tTBv4m8MCHFJ6YVCmJpV =C8Bx -----END PGP SIGNATURE----- Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging Pull hwmon patches from Guenter Roeck: - Fix crash in ad7314 driver - Add support for AMD Trinity CPUs to k10temp driver - Fix __initdata/__initconst mixup in w83627ehf driver - Fix runtime warnings in acpi_power_meter and max6639 drivers - Fix build warnings in adm1031, f75375s, sht15, and gpio-fan drivers * tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: hwmon: (ad7314) Adds missing spi_dev initialization hwmon: (k10temp) Add support for AMD Trinity CPUs hwmon: (w83627ehf) mark const init data with __initconst instead of __initdata hwmon: (acpi_power_meter) fix lockdep spew due to non-static lock class hwmon: (adm1031) Fix compiler warning hwmon: (f75375s) Fix warning message seen in some configurations hwmon: (max6639) Convert to dev_pm_ops hwmon: (sht15) Fix Kconfig dependencies hwmon: (gpio-fan) Fix Kconfig dependencies
This commit is contained in:
commit
20d9d9a054
9 changed files with 42 additions and 29 deletions
|
@ -11,7 +11,7 @@ Supported chips:
|
|||
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
||||
* AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
|
||||
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
||||
* AMD Family 15h processors: "Bulldozer"
|
||||
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity"
|
||||
|
||||
Prefix: 'k10temp'
|
||||
Addresses scanned: PCI space
|
||||
|
|
|
@ -253,7 +253,8 @@ config SENSORS_K10TEMP
|
|||
If you say yes here you get support for the temperature
|
||||
sensor(s) inside your CPU. Supported are later revisions of
|
||||
the AMD Family 10h and all revisions of the AMD Family 11h,
|
||||
12h (Llano), 14h (Brazos) and 15h (Bulldozer) microarchitectures.
|
||||
12h (Llano), 14h (Brazos) and 15h (Bulldozer/Trinity)
|
||||
microarchitectures.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called k10temp.
|
||||
|
@ -425,7 +426,7 @@ config SENSORS_GL520SM
|
|||
|
||||
config SENSORS_GPIO_FAN
|
||||
tristate "GPIO fan"
|
||||
depends on GENERIC_GPIO
|
||||
depends on GPIOLIB
|
||||
help
|
||||
If you say yes here you get support for fans connected to GPIO lines.
|
||||
|
||||
|
@ -883,7 +884,7 @@ source drivers/hwmon/pmbus/Kconfig
|
|||
|
||||
config SENSORS_SHT15
|
||||
tristate "Sensiron humidity and temperature sensors. SHT15 and compat."
|
||||
depends on GENERIC_GPIO
|
||||
depends on GPIOLIB
|
||||
help
|
||||
If you say yes here you get support for the Sensiron SHT10, SHT11,
|
||||
SHT15, SHT71, SHT75 humidity and temperature sensors.
|
||||
|
|
|
@ -632,6 +632,7 @@ static int register_ro_attrs(struct acpi_power_meter_resource *resource,
|
|||
sensors->dev_attr.show = ro->show;
|
||||
sensors->index = ro->index;
|
||||
|
||||
sysfs_attr_init(&sensors->dev_attr.attr);
|
||||
res = device_create_file(dev, &sensors->dev_attr);
|
||||
if (res) {
|
||||
sensors->dev_attr.attr.name = NULL;
|
||||
|
@ -661,6 +662,7 @@ static int register_rw_attrs(struct acpi_power_meter_resource *resource,
|
|||
sensors->dev_attr.store = rw->set;
|
||||
sensors->index = rw->index;
|
||||
|
||||
sysfs_attr_init(&sensors->dev_attr.attr);
|
||||
res = device_create_file(dev, &sensors->dev_attr);
|
||||
if (res) {
|
||||
sensors->dev_attr.attr.name = NULL;
|
||||
|
|
|
@ -128,6 +128,7 @@ static int __devinit ad7314_probe(struct spi_device *spi_dev)
|
|||
ret = PTR_ERR(chip->hwmon_dev);
|
||||
goto error_remove_group;
|
||||
}
|
||||
chip->spi_dev = spi_dev;
|
||||
|
||||
return 0;
|
||||
error_remove_group:
|
||||
|
|
|
@ -233,18 +233,15 @@ static const auto_chan_table_t auto_channel_select_table_adm1030 = {
|
|||
* nearest match if no exact match where found.
|
||||
*/
|
||||
static int
|
||||
get_fan_auto_nearest(struct adm1031_data *data,
|
||||
int chan, u8 val, u8 reg, u8 *new_reg)
|
||||
get_fan_auto_nearest(struct adm1031_data *data, int chan, u8 val, u8 reg)
|
||||
{
|
||||
int i;
|
||||
int first_match = -1, exact_match = -1;
|
||||
u8 other_reg_val =
|
||||
(*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
|
||||
|
||||
if (val == 0) {
|
||||
*new_reg = 0;
|
||||
if (val == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
if ((val == (*data->chan_select_table)[i][chan]) &&
|
||||
|
@ -264,13 +261,11 @@ get_fan_auto_nearest(struct adm1031_data *data,
|
|||
}
|
||||
|
||||
if (exact_match >= 0)
|
||||
*new_reg = exact_match;
|
||||
return exact_match;
|
||||
else if (first_match >= 0)
|
||||
*new_reg = first_match;
|
||||
else
|
||||
return -EINVAL;
|
||||
return first_match;
|
||||
|
||||
return 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static ssize_t show_fan_auto_channel(struct device *dev,
|
||||
|
@ -301,11 +296,12 @@ set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
|
|||
|
||||
mutex_lock(&data->update_lock);
|
||||
|
||||
ret = get_fan_auto_nearest(data, nr, val, data->conf1, ®);
|
||||
if (ret) {
|
||||
ret = get_fan_auto_nearest(data, nr, val, data->conf1);
|
||||
if (ret < 0) {
|
||||
mutex_unlock(&data->update_lock);
|
||||
return ret;
|
||||
}
|
||||
reg = ret;
|
||||
data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
|
||||
if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
|
||||
(old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
|
||||
|
|
|
@ -276,6 +276,7 @@ static bool duty_mode_enabled(u8 pwm_enable)
|
|||
return false;
|
||||
default:
|
||||
BUG();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,6 +292,7 @@ static bool auto_mode_enabled(u8 pwm_enable)
|
|||
return true;
|
||||
default:
|
||||
BUG();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,9 @@ static bool force;
|
|||
module_param(force, bool, 0444);
|
||||
MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
|
||||
|
||||
/* PCI-IDs for Northbridge devices not used anywhere else */
|
||||
#define PCI_DEVICE_ID_AMD_15H_M10H_NB_F3 0x1403
|
||||
|
||||
/* CPUID function 0x80000001, ebx */
|
||||
#define CPUID_PKGTYPE_MASK 0xf0000000
|
||||
#define CPUID_PKGTYPE_F 0x00000000
|
||||
|
@ -210,6 +213,7 @@ static DEFINE_PCI_DEVICE_TABLE(k10temp_id_table) = {
|
|||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_11H_NB_MISC) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) },
|
||||
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_NB_F3) },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, k10temp_id_table);
|
||||
|
|
|
@ -596,8 +596,10 @@ static int max6639_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int max6639_suspend(struct i2c_client *client, pm_message_t mesg)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int max6639_suspend(struct device *dev)
|
||||
{
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
int data = i2c_smbus_read_byte_data(client, MAX6639_REG_GCONFIG);
|
||||
if (data < 0)
|
||||
return data;
|
||||
|
@ -606,8 +608,9 @@ static int max6639_suspend(struct i2c_client *client, pm_message_t mesg)
|
|||
MAX6639_REG_GCONFIG, data | MAX6639_GCONFIG_STANDBY);
|
||||
}
|
||||
|
||||
static int max6639_resume(struct i2c_client *client)
|
||||
static int max6639_resume(struct device *dev)
|
||||
{
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
int data = i2c_smbus_read_byte_data(client, MAX6639_REG_GCONFIG);
|
||||
if (data < 0)
|
||||
return data;
|
||||
|
@ -615,6 +618,7 @@ static int max6639_resume(struct i2c_client *client)
|
|||
return i2c_smbus_write_byte_data(client,
|
||||
MAX6639_REG_GCONFIG, data & ~MAX6639_GCONFIG_STANDBY);
|
||||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
static const struct i2c_device_id max6639_id[] = {
|
||||
{"max6639", 0},
|
||||
|
@ -623,15 +627,18 @@ static const struct i2c_device_id max6639_id[] = {
|
|||
|
||||
MODULE_DEVICE_TABLE(i2c, max6639_id);
|
||||
|
||||
static const struct dev_pm_ops max6639_pm_ops = {
|
||||
SET_SYSTEM_SLEEP_PM_OPS(max6639_suspend, max6639_resume)
|
||||
};
|
||||
|
||||
static struct i2c_driver max6639_driver = {
|
||||
.class = I2C_CLASS_HWMON,
|
||||
.driver = {
|
||||
.name = "max6639",
|
||||
.pm = &max6639_pm_ops,
|
||||
},
|
||||
.probe = max6639_probe,
|
||||
.remove = max6639_remove,
|
||||
.suspend = max6639_suspend,
|
||||
.resume = max6639_resume,
|
||||
.id_table = max6639_id,
|
||||
.detect = max6639_detect,
|
||||
.address_list = normal_i2c,
|
||||
|
|
|
@ -2619,15 +2619,15 @@ static struct platform_driver w83627ehf_driver = {
|
|||
static int __init w83627ehf_find(int sioaddr, unsigned short *addr,
|
||||
struct w83627ehf_sio_data *sio_data)
|
||||
{
|
||||
static const char __initdata sio_name_W83627EHF[] = "W83627EHF";
|
||||
static const char __initdata sio_name_W83627EHG[] = "W83627EHG";
|
||||
static const char __initdata sio_name_W83627DHG[] = "W83627DHG";
|
||||
static const char __initdata sio_name_W83627DHG_P[] = "W83627DHG-P";
|
||||
static const char __initdata sio_name_W83627UHG[] = "W83627UHG";
|
||||
static const char __initdata sio_name_W83667HG[] = "W83667HG";
|
||||
static const char __initdata sio_name_W83667HG_B[] = "W83667HG-B";
|
||||
static const char __initdata sio_name_NCT6775[] = "NCT6775F";
|
||||
static const char __initdata sio_name_NCT6776[] = "NCT6776F";
|
||||
static const char sio_name_W83627EHF[] __initconst = "W83627EHF";
|
||||
static const char sio_name_W83627EHG[] __initconst = "W83627EHG";
|
||||
static const char sio_name_W83627DHG[] __initconst = "W83627DHG";
|
||||
static const char sio_name_W83627DHG_P[] __initconst = "W83627DHG-P";
|
||||
static const char sio_name_W83627UHG[] __initconst = "W83627UHG";
|
||||
static const char sio_name_W83667HG[] __initconst = "W83667HG";
|
||||
static const char sio_name_W83667HG_B[] __initconst = "W83667HG-B";
|
||||
static const char sio_name_NCT6775[] __initconst = "NCT6775F";
|
||||
static const char sio_name_NCT6776[] __initconst = "NCT6776F";
|
||||
|
||||
u16 val;
|
||||
const char *sio_name;
|
||||
|
|
Loading…
Reference in a new issue