From 439028f14d580958d5e1bd2edb5a425490cf3ae5 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Sat, 7 Jan 2017 18:09:24 +0000 Subject: [PATCH] Quanta patch to recognize emerson power supplied. I'd prefer this to be done more generically. --- ...iver-hwmon-emerson-update-pmbus-core.patch | 46 +++++++++++++++++++ .../base/any/kernels/3.16-lts/patches/series | 1 + 2 files changed, 47 insertions(+) create mode 100644 packages/base/any/kernels/3.16-lts/patches/driver-hwmon-emerson-update-pmbus-core.patch diff --git a/packages/base/any/kernels/3.16-lts/patches/driver-hwmon-emerson-update-pmbus-core.patch b/packages/base/any/kernels/3.16-lts/patches/driver-hwmon-emerson-update-pmbus-core.patch new file mode 100644 index 00000000..ee7f587b --- /dev/null +++ b/packages/base/any/kernels/3.16-lts/patches/driver-hwmon-emerson-update-pmbus-core.patch @@ -0,0 +1,46 @@ +diff -urpN a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c +--- a/drivers/hwmon/pmbus/pmbus_core.c 2017-01-07 00:56:44.908974275 +0000 ++++ b/drivers/hwmon/pmbus/pmbus_core.c 2017-01-07 01:02:17.176981485 +0000 +@@ -1680,6 +1680,21 @@ static int pmbus_identify_common(struct + return 0; + } + ++static int pmbus_emer_detect(struct i2c_client *client) ++{ ++ struct device *dev = &client->dev; ++ u8 value[4]; ++ ++ if(i2c_smbus_read_block_data(client, PMBUS_MFR_ID, value) > 0 ++ && memcmp(value, "EMER", 4) == 0) { ++ dev_info(dev, "EMER detected\n"); ++ return 0; ++ } ++ ++ return -ENODEV; ++} ++ ++ + static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data, + struct pmbus_driver_info *info) + { +@@ -1697,8 +1712,18 @@ static int pmbus_init_common(struct i2c_ + data->status_register = PMBUS_STATUS_WORD; + ret = i2c_smbus_read_word_data(client, PMBUS_STATUS_WORD); + if (ret < 0 || ret == 0xffff) { +- dev_err(dev, "PMBus status register not found\n"); +- return -ENODEV; ++ if(pmbus_emer_detect(client) == 0) { ++ data->status_register = PMBUS_STATUS_MFR_SPECIFIC; ++ ret = i2c_smbus_read_byte_data(client, PMBUS_STATUS_MFR_SPECIFIC); ++ if (ret < 0 || ret == 0xff) { ++ dev_err(dev, "PMBus status register not found\n"); ++ return -ENODEV; ++ } ++ } ++ else { ++ dev_err(dev, "PMBus status register not found\n"); ++ return -ENODEV; ++ } + } + } + diff --git a/packages/base/any/kernels/3.16-lts/patches/series b/packages/base/any/kernels/3.16-lts/patches/series index aa2fb0f9..3fb26324 100644 --- a/packages/base/any/kernels/3.16-lts/patches/series +++ b/packages/base/any/kernels/3.16-lts/patches/series @@ -19,3 +19,4 @@ drivers-i2c-muxes-pca954x-deselect-on-exit.patch driver-early-dma-allocator.patch driver-esdhc-p2020-broken-timeout.patch drivers-gpio-config-arch-nr-gpios.patch +driver-hwmon-emerson-update-pmbus-core.patch