* [PATCH v2 0/3] pmbus: ibm-cffps: Add support for version 2 of PSU @ 2019-08-30 19:11 Eddie James 2019-08-30 19:11 ` [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string Eddie James ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Eddie James @ 2019-08-30 19:11 UTC (permalink / raw) To: linux-hwmon Cc: linux-kernel, linux-aspeed, devicetree, linux, andrew, joel, mark.rutland, robh+dt, jdelvare, Eddie James Version 2 of this PSU supports a second page of data and changes the format of the FW version command. Use the devicetree binding (or the I2C device ID) to determine which version the driver should use. Therefore add the new compatible string to the devicetree documentation and change the Swift system devicetree to use version 2. Changes since v1: - use an enum for the version instead of integers 1, 2, etc Eddie James (3): dt-bindings: hwmon: Document ibm,cffps2 compatible string ARM: dts: aspeed: swift: Change power supplies to version 2 pmbus: ibm-cffps: Add support for version 2 of the PSU .../devicetree/bindings/hwmon/ibm,cffps1.txt | 8 +- arch/arm/boot/dts/aspeed-bmc-opp-swift.dts | 4 +- drivers/hwmon/pmbus/ibm-cffps.c | 110 ++++++++++++++++----- 3 files changed, 95 insertions(+), 27 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string 2019-08-30 19:11 [PATCH v2 0/3] pmbus: ibm-cffps: Add support for version 2 of PSU Eddie James @ 2019-08-30 19:11 ` Eddie James 2019-08-31 15:26 ` Guenter Roeck 2019-09-02 13:39 ` Rob Herring 2019-08-30 19:11 ` [PATCH v2 2/3] ARM: dts: aspeed: swift: Change power supplies to version 2 Eddie James 2019-08-30 19:11 ` [PATCH v2 3/3] pmbus: ibm-cffps: Add support for version 2 of the PSU Eddie James 2 siblings, 2 replies; 7+ messages in thread From: Eddie James @ 2019-08-30 19:11 UTC (permalink / raw) To: linux-hwmon Cc: linux-kernel, linux-aspeed, devicetree, linux, andrew, joel, mark.rutland, robh+dt, jdelvare, Eddie James Document the compatible string for version 2 of the IBM CFFPS PSU. Signed-off-by: Eddie James <eajames@linux.ibm.com> --- Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt b/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt index f68a0a6..1036f65 100644 --- a/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt +++ b/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt @@ -1,8 +1,10 @@ -Device-tree bindings for IBM Common Form Factor Power Supply Version 1 ----------------------------------------------------------------------- +Device-tree bindings for IBM Common Form Factor Power Supply Versions 1 and 2 +----------------------------------------------------------------------------- Required properties: - - compatible = "ibm,cffps1"; + - compatible : Must be one of the following: + "ibm,cffps1" + "ibm,cffps2" - reg = < I2C bus address >; : Address of the power supply on the I2C bus. -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string 2019-08-30 19:11 ` [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string Eddie James @ 2019-08-31 15:26 ` Guenter Roeck 2019-09-02 13:39 ` Rob Herring 1 sibling, 0 replies; 7+ messages in thread From: Guenter Roeck @ 2019-08-31 15:26 UTC (permalink / raw) To: Eddie James Cc: linux-hwmon, linux-kernel, linux-aspeed, devicetree, andrew, joel, mark.rutland, robh+dt, jdelvare On Fri, Aug 30, 2019 at 02:11:01PM -0500, Eddie James wrote: > Document the compatible string for version 2 of the IBM CFFPS PSU. > > Signed-off-by: Eddie James <eajames@linux.ibm.com> Applied to hwmon-next. Note that we'll still need review from a DT maintainer. I don't see any problems, but then who knows. Thanks, Guenter > --- > Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt b/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt > index f68a0a6..1036f65 100644 > --- a/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt > +++ b/Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt > @@ -1,8 +1,10 @@ > -Device-tree bindings for IBM Common Form Factor Power Supply Version 1 > ----------------------------------------------------------------------- > +Device-tree bindings for IBM Common Form Factor Power Supply Versions 1 and 2 > +----------------------------------------------------------------------------- > > Required properties: > - - compatible = "ibm,cffps1"; > + - compatible : Must be one of the following: > + "ibm,cffps1" > + "ibm,cffps2" > - reg = < I2C bus address >; : Address of the power supply on the > I2C bus. > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string 2019-08-30 19:11 ` [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string Eddie James 2019-08-31 15:26 ` Guenter Roeck @ 2019-09-02 13:39 ` Rob Herring 1 sibling, 0 replies; 7+ messages in thread From: Rob Herring @ 2019-09-02 13:39 UTC (permalink / raw) To: Eddie James Cc: linux-hwmon, linux-kernel, linux-aspeed, devicetree, linux, andrew, joel, mark.rutland, robh+dt, jdelvare, Eddie James On Fri, 30 Aug 2019 14:11:01 -0500, Eddie James wrote: > Document the compatible string for version 2 of the IBM CFFPS PSU. > > Signed-off-by: Eddie James <eajames@linux.ibm.com> > --- > Documentation/devicetree/bindings/hwmon/ibm,cffps1.txt | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 2/3] ARM: dts: aspeed: swift: Change power supplies to version 2 2019-08-30 19:11 [PATCH v2 0/3] pmbus: ibm-cffps: Add support for version 2 of PSU Eddie James 2019-08-30 19:11 ` [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string Eddie James @ 2019-08-30 19:11 ` Eddie James 2019-08-30 19:11 ` [PATCH v2 3/3] pmbus: ibm-cffps: Add support for version 2 of the PSU Eddie James 2 siblings, 0 replies; 7+ messages in thread From: Eddie James @ 2019-08-30 19:11 UTC (permalink / raw) To: linux-hwmon Cc: linux-kernel, linux-aspeed, devicetree, linux, andrew, joel, mark.rutland, robh+dt, jdelvare, Eddie James Swift power supplies are version 2 of the IBM CFFPS. Make it so in the devicetree. Signed-off-by: Eddie James <eajames@linux.ibm.com> --- arch/arm/boot/dts/aspeed-bmc-opp-swift.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-swift.dts b/arch/arm/boot/dts/aspeed-bmc-opp-swift.dts index f14f745..815b865 100644 --- a/arch/arm/boot/dts/aspeed-bmc-opp-swift.dts +++ b/arch/arm/boot/dts/aspeed-bmc-opp-swift.dts @@ -494,7 +494,7 @@ }; power-supply@68 { - compatible = "ibm,cffps1"; + compatible = "ibm,cffps2"; reg = <0x68>; }; @@ -504,7 +504,7 @@ }; power-supply@69 { - compatible = "ibm,cffps1"; + compatible = "ibm,cffps2"; reg = <0x69>; }; -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] pmbus: ibm-cffps: Add support for version 2 of the PSU 2019-08-30 19:11 [PATCH v2 0/3] pmbus: ibm-cffps: Add support for version 2 of PSU Eddie James 2019-08-30 19:11 ` [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string Eddie James 2019-08-30 19:11 ` [PATCH v2 2/3] ARM: dts: aspeed: swift: Change power supplies to version 2 Eddie James @ 2019-08-30 19:11 ` Eddie James 2019-08-31 15:28 ` Guenter Roeck 2 siblings, 1 reply; 7+ messages in thread From: Eddie James @ 2019-08-30 19:11 UTC (permalink / raw) To: linux-hwmon Cc: linux-kernel, linux-aspeed, devicetree, linux, andrew, joel, mark.rutland, robh+dt, jdelvare, Eddie James Version 2 of the PSU supports a second page of data and changes the format of the FW version. Use the devicetree binding to differentiate between the version the driver should use. Signed-off-by: Eddie James <eajames@linux.ibm.com> --- Changes since v1: - use an enum for the version instead of integers 1, 2, etc drivers/hwmon/pmbus/ibm-cffps.c | 110 ++++++++++++++++++++++++++++++++-------- 1 file changed, 88 insertions(+), 22 deletions(-) diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c index ee2ee9e..d44745e 100644 --- a/drivers/hwmon/pmbus/ibm-cffps.c +++ b/drivers/hwmon/pmbus/ibm-cffps.c @@ -12,6 +12,7 @@ #include <linux/leds.h> #include <linux/module.h> #include <linux/mutex.h> +#include <linux/of_device.h> #include <linux/pmbus.h> #include "pmbus.h" @@ -20,8 +21,9 @@ #define CFFPS_PN_CMD 0x9B #define CFFPS_SN_CMD 0x9E #define CFFPS_CCIN_CMD 0xBD -#define CFFPS_FW_CMD_START 0xFA -#define CFFPS_FW_NUM_BYTES 4 +#define CFFPS_FW_CMD 0xFA +#define CFFPS1_FW_NUM_BYTES 4 +#define CFFPS2_FW_NUM_WORDS 3 #define CFFPS_SYS_CONFIG_CMD 0xDA #define CFFPS_INPUT_HISTORY_CMD 0xD6 @@ -52,6 +54,8 @@ enum { CFFPS_DEBUGFS_NUM_ENTRIES }; +enum versions { cffps1, cffps2 }; + struct ibm_cffps_input_history { struct mutex update_lock; unsigned long last_update; @@ -61,6 +65,7 @@ struct ibm_cffps_input_history { }; struct ibm_cffps { + enum versions version; struct i2c_client *client; struct ibm_cffps_input_history input_history; @@ -132,6 +137,8 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf, struct ibm_cffps *psu = to_psu(idxp, idx); char data[I2C_SMBUS_BLOCK_MAX] = { 0 }; + pmbus_set_page(psu->client, 0); + switch (idx) { case CFFPS_DEBUGFS_INPUT_HISTORY: return ibm_cffps_read_input_history(psu, buf, count, ppos); @@ -152,16 +159,36 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf, rc = snprintf(data, 5, "%04X", rc); goto done; case CFFPS_DEBUGFS_FW: - for (i = 0; i < CFFPS_FW_NUM_BYTES; ++i) { - rc = i2c_smbus_read_byte_data(psu->client, - CFFPS_FW_CMD_START + i); - if (rc < 0) - return rc; + switch (psu->version) { + case cffps1: + for (i = 0; i < CFFPS1_FW_NUM_BYTES; ++i) { + rc = i2c_smbus_read_byte_data(psu->client, + CFFPS_FW_CMD + + i); + if (rc < 0) + return rc; + + snprintf(&data[i * 2], 3, "%02X", rc); + } - snprintf(&data[i * 2], 3, "%02X", rc); - } + rc = i * 2; + break; + case cffps2: + for (i = 0; i < CFFPS2_FW_NUM_WORDS; ++i) { + rc = i2c_smbus_read_word_data(psu->client, + CFFPS_FW_CMD + + i); + if (rc < 0) + return rc; + + snprintf(&data[i * 4], 5, "%04X", rc); + } - rc = i * 2; + rc = i * 4; + break; + default: + return -EOPNOTSUPP; + } goto done; default: return -EINVAL; @@ -279,6 +306,8 @@ static void ibm_cffps_led_brightness_set(struct led_classdev *led_cdev, psu->led_state = CFFPS_LED_ON; } + pmbus_set_page(psu->client, 0); + rc = i2c_smbus_write_byte_data(psu->client, CFFPS_SYS_CONFIG_CMD, psu->led_state); if (rc < 0) @@ -299,6 +328,8 @@ static int ibm_cffps_led_blink_set(struct led_classdev *led_cdev, if (led_cdev->brightness == LED_OFF) return 0; + pmbus_set_page(psu->client, 0); + rc = i2c_smbus_write_byte_data(psu->client, CFFPS_SYS_CONFIG_CMD, CFFPS_LED_BLINK); if (rc < 0) @@ -328,15 +359,32 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu) dev_warn(dev, "failed to register led class: %d\n", rc); } -static struct pmbus_driver_info ibm_cffps_info = { - .pages = 1, - .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | - PMBUS_HAVE_PIN | PMBUS_HAVE_FAN12 | PMBUS_HAVE_TEMP | - PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | PMBUS_HAVE_STATUS_VOUT | - PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT | - PMBUS_HAVE_STATUS_TEMP | PMBUS_HAVE_STATUS_FAN12, - .read_byte_data = ibm_cffps_read_byte_data, - .read_word_data = ibm_cffps_read_word_data, +static struct pmbus_driver_info ibm_cffps_info[] = { + [cffps1] = { + .pages = 1, + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | + PMBUS_HAVE_PIN | PMBUS_HAVE_FAN12 | PMBUS_HAVE_TEMP | + PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT | + PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP | + PMBUS_HAVE_STATUS_FAN12, + .read_byte_data = ibm_cffps_read_byte_data, + .read_word_data = ibm_cffps_read_word_data, + }, + [cffps2] = { + .pages = 2, + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | + PMBUS_HAVE_PIN | PMBUS_HAVE_FAN12 | PMBUS_HAVE_TEMP | + PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT | + PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP | + PMBUS_HAVE_STATUS_FAN12, + .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | + PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT, + .read_byte_data = ibm_cffps_read_byte_data, + .read_word_data = ibm_cffps_read_word_data, + }, }; static struct pmbus_platform_data ibm_cffps_pdata = { @@ -347,12 +395,21 @@ static int ibm_cffps_probe(struct i2c_client *client, const struct i2c_device_id *id) { int i, rc; + enum versions vs; struct dentry *debugfs; struct dentry *ibm_cffps_dir; struct ibm_cffps *psu; + const void *md = of_device_get_match_data(&client->dev); + + if (md) + vs = (enum versions)md; + else if (id) + vs = (enum versions)id->driver_data; + else + vs = cffps1; client->dev.platform_data = &ibm_cffps_pdata; - rc = pmbus_do_probe(client, id, &ibm_cffps_info); + rc = pmbus_do_probe(client, id, &ibm_cffps_info[vs]); if (rc) return rc; @@ -364,6 +421,7 @@ static int ibm_cffps_probe(struct i2c_client *client, if (!psu) return 0; + psu->version = vs; psu->client = client; mutex_init(&psu->input_history.update_lock); psu->input_history.last_update = jiffies - HZ; @@ -405,13 +463,21 @@ static int ibm_cffps_probe(struct i2c_client *client, } static const struct i2c_device_id ibm_cffps_id[] = { - { "ibm_cffps1", 1 }, + { "ibm_cffps1", cffps1 }, + { "ibm_cffps2", cffps2 }, {} }; MODULE_DEVICE_TABLE(i2c, ibm_cffps_id); static const struct of_device_id ibm_cffps_of_match[] = { - { .compatible = "ibm,cffps1" }, + { + .compatible = "ibm,cffps1", + .data = (void *)cffps1 + }, + { + .compatible = "ibm,cffps2", + .data = (void *)cffps2 + }, {} }; MODULE_DEVICE_TABLE(of, ibm_cffps_of_match); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 3/3] pmbus: ibm-cffps: Add support for version 2 of the PSU 2019-08-30 19:11 ` [PATCH v2 3/3] pmbus: ibm-cffps: Add support for version 2 of the PSU Eddie James @ 2019-08-31 15:28 ` Guenter Roeck 0 siblings, 0 replies; 7+ messages in thread From: Guenter Roeck @ 2019-08-31 15:28 UTC (permalink / raw) To: Eddie James Cc: linux-hwmon, linux-kernel, linux-aspeed, devicetree, andrew, joel, mark.rutland, robh+dt, jdelvare On Fri, Aug 30, 2019 at 02:11:03PM -0500, Eddie James wrote: > Version 2 of the PSU supports a second page of data and changes the > format of the FW version. Use the devicetree binding to differentiate > between the version the driver should use. > > Signed-off-by: Eddie James <eajames@linux.ibm.com> Applied to hwmon-next. Thanks, Guenter > --- > Changes since v1: > - use an enum for the version instead of integers 1, 2, etc > > drivers/hwmon/pmbus/ibm-cffps.c | 110 ++++++++++++++++++++++++++++++++-------- > 1 file changed, 88 insertions(+), 22 deletions(-) > > diff --git a/drivers/hwmon/pmbus/ibm-cffps.c b/drivers/hwmon/pmbus/ibm-cffps.c > index ee2ee9e..d44745e 100644 > --- a/drivers/hwmon/pmbus/ibm-cffps.c > +++ b/drivers/hwmon/pmbus/ibm-cffps.c > @@ -12,6 +12,7 @@ > #include <linux/leds.h> > #include <linux/module.h> > #include <linux/mutex.h> > +#include <linux/of_device.h> > #include <linux/pmbus.h> > > #include "pmbus.h" > @@ -20,8 +21,9 @@ > #define CFFPS_PN_CMD 0x9B > #define CFFPS_SN_CMD 0x9E > #define CFFPS_CCIN_CMD 0xBD > -#define CFFPS_FW_CMD_START 0xFA > -#define CFFPS_FW_NUM_BYTES 4 > +#define CFFPS_FW_CMD 0xFA > +#define CFFPS1_FW_NUM_BYTES 4 > +#define CFFPS2_FW_NUM_WORDS 3 > #define CFFPS_SYS_CONFIG_CMD 0xDA > > #define CFFPS_INPUT_HISTORY_CMD 0xD6 > @@ -52,6 +54,8 @@ enum { > CFFPS_DEBUGFS_NUM_ENTRIES > }; > > +enum versions { cffps1, cffps2 }; > + > struct ibm_cffps_input_history { > struct mutex update_lock; > unsigned long last_update; > @@ -61,6 +65,7 @@ struct ibm_cffps_input_history { > }; > > struct ibm_cffps { > + enum versions version; > struct i2c_client *client; > > struct ibm_cffps_input_history input_history; > @@ -132,6 +137,8 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf, > struct ibm_cffps *psu = to_psu(idxp, idx); > char data[I2C_SMBUS_BLOCK_MAX] = { 0 }; > > + pmbus_set_page(psu->client, 0); > + > switch (idx) { > case CFFPS_DEBUGFS_INPUT_HISTORY: > return ibm_cffps_read_input_history(psu, buf, count, ppos); > @@ -152,16 +159,36 @@ static ssize_t ibm_cffps_debugfs_op(struct file *file, char __user *buf, > rc = snprintf(data, 5, "%04X", rc); > goto done; > case CFFPS_DEBUGFS_FW: > - for (i = 0; i < CFFPS_FW_NUM_BYTES; ++i) { > - rc = i2c_smbus_read_byte_data(psu->client, > - CFFPS_FW_CMD_START + i); > - if (rc < 0) > - return rc; > + switch (psu->version) { > + case cffps1: > + for (i = 0; i < CFFPS1_FW_NUM_BYTES; ++i) { > + rc = i2c_smbus_read_byte_data(psu->client, > + CFFPS_FW_CMD + > + i); > + if (rc < 0) > + return rc; > + > + snprintf(&data[i * 2], 3, "%02X", rc); > + } > > - snprintf(&data[i * 2], 3, "%02X", rc); > - } > + rc = i * 2; > + break; > + case cffps2: > + for (i = 0; i < CFFPS2_FW_NUM_WORDS; ++i) { > + rc = i2c_smbus_read_word_data(psu->client, > + CFFPS_FW_CMD + > + i); > + if (rc < 0) > + return rc; > + > + snprintf(&data[i * 4], 5, "%04X", rc); > + } > > - rc = i * 2; > + rc = i * 4; > + break; > + default: > + return -EOPNOTSUPP; > + } > goto done; > default: > return -EINVAL; > @@ -279,6 +306,8 @@ static void ibm_cffps_led_brightness_set(struct led_classdev *led_cdev, > psu->led_state = CFFPS_LED_ON; > } > > + pmbus_set_page(psu->client, 0); > + > rc = i2c_smbus_write_byte_data(psu->client, CFFPS_SYS_CONFIG_CMD, > psu->led_state); > if (rc < 0) > @@ -299,6 +328,8 @@ static int ibm_cffps_led_blink_set(struct led_classdev *led_cdev, > if (led_cdev->brightness == LED_OFF) > return 0; > > + pmbus_set_page(psu->client, 0); > + > rc = i2c_smbus_write_byte_data(psu->client, CFFPS_SYS_CONFIG_CMD, > CFFPS_LED_BLINK); > if (rc < 0) > @@ -328,15 +359,32 @@ static void ibm_cffps_create_led_class(struct ibm_cffps *psu) > dev_warn(dev, "failed to register led class: %d\n", rc); > } > > -static struct pmbus_driver_info ibm_cffps_info = { > - .pages = 1, > - .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | > - PMBUS_HAVE_PIN | PMBUS_HAVE_FAN12 | PMBUS_HAVE_TEMP | > - PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | PMBUS_HAVE_STATUS_VOUT | > - PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_STATUS_INPUT | > - PMBUS_HAVE_STATUS_TEMP | PMBUS_HAVE_STATUS_FAN12, > - .read_byte_data = ibm_cffps_read_byte_data, > - .read_word_data = ibm_cffps_read_word_data, > +static struct pmbus_driver_info ibm_cffps_info[] = { > + [cffps1] = { > + .pages = 1, > + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | > + PMBUS_HAVE_PIN | PMBUS_HAVE_FAN12 | PMBUS_HAVE_TEMP | > + PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | > + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT | > + PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP | > + PMBUS_HAVE_STATUS_FAN12, > + .read_byte_data = ibm_cffps_read_byte_data, > + .read_word_data = ibm_cffps_read_word_data, > + }, > + [cffps2] = { > + .pages = 2, > + .func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | > + PMBUS_HAVE_PIN | PMBUS_HAVE_FAN12 | PMBUS_HAVE_TEMP | > + PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | > + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT | > + PMBUS_HAVE_STATUS_INPUT | PMBUS_HAVE_STATUS_TEMP | > + PMBUS_HAVE_STATUS_FAN12, > + .func[1] = PMBUS_HAVE_VOUT | PMBUS_HAVE_IOUT | > + PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 | PMBUS_HAVE_TEMP3 | > + PMBUS_HAVE_STATUS_VOUT | PMBUS_HAVE_STATUS_IOUT, > + .read_byte_data = ibm_cffps_read_byte_data, > + .read_word_data = ibm_cffps_read_word_data, > + }, > }; > > static struct pmbus_platform_data ibm_cffps_pdata = { > @@ -347,12 +395,21 @@ static int ibm_cffps_probe(struct i2c_client *client, > const struct i2c_device_id *id) > { > int i, rc; > + enum versions vs; > struct dentry *debugfs; > struct dentry *ibm_cffps_dir; > struct ibm_cffps *psu; > + const void *md = of_device_get_match_data(&client->dev); > + > + if (md) > + vs = (enum versions)md; > + else if (id) > + vs = (enum versions)id->driver_data; > + else > + vs = cffps1; > > client->dev.platform_data = &ibm_cffps_pdata; > - rc = pmbus_do_probe(client, id, &ibm_cffps_info); > + rc = pmbus_do_probe(client, id, &ibm_cffps_info[vs]); > if (rc) > return rc; > > @@ -364,6 +421,7 @@ static int ibm_cffps_probe(struct i2c_client *client, > if (!psu) > return 0; > > + psu->version = vs; > psu->client = client; > mutex_init(&psu->input_history.update_lock); > psu->input_history.last_update = jiffies - HZ; > @@ -405,13 +463,21 @@ static int ibm_cffps_probe(struct i2c_client *client, > } > > static const struct i2c_device_id ibm_cffps_id[] = { > - { "ibm_cffps1", 1 }, > + { "ibm_cffps1", cffps1 }, > + { "ibm_cffps2", cffps2 }, > {} > }; > MODULE_DEVICE_TABLE(i2c, ibm_cffps_id); > > static const struct of_device_id ibm_cffps_of_match[] = { > - { .compatible = "ibm,cffps1" }, > + { > + .compatible = "ibm,cffps1", > + .data = (void *)cffps1 > + }, > + { > + .compatible = "ibm,cffps2", > + .data = (void *)cffps2 > + }, > {} > }; > MODULE_DEVICE_TABLE(of, ibm_cffps_of_match); ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-09-02 13:39 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-08-30 19:11 [PATCH v2 0/3] pmbus: ibm-cffps: Add support for version 2 of PSU Eddie James 2019-08-30 19:11 ` [PATCH v2 1/3] dt-bindings: hwmon: Document ibm,cffps2 compatible string Eddie James 2019-08-31 15:26 ` Guenter Roeck 2019-09-02 13:39 ` Rob Herring 2019-08-30 19:11 ` [PATCH v2 2/3] ARM: dts: aspeed: swift: Change power supplies to version 2 Eddie James 2019-08-30 19:11 ` [PATCH v2 3/3] pmbus: ibm-cffps: Add support for version 2 of the PSU Eddie James 2019-08-31 15:28 ` Guenter Roeck
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).