Merge tag 'mfd-for-linus-4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
Pull MFD updates from Lee Jones: "Changes to existing drivers: - Constify structures; throughout the subsystem - Move support to DT in; cros_ec - DT changes and documentation; cros-ec, max77693, max77686, arizona, da9063 - ACPI changes and documentation; mfd-core - Use different platform specific API in; cros_ec_*, arizona-core - Remove unused parent field from; cros_ec_i2c - Add wake-up/reset delay in; cross_ec_spi, arizona-core - Staticise structures/functions in; cros_ec - Remove redundant code; arizona-core, max77686 - Bugfix; twl4030-power - Allow compile test; aat2870, tps65910 - MAINTAINERS adaptions; samsung, syscon - Resource Management (devm_*); arizona-core - Refactor Reset code; arizona-core - Insist on at least one full boot; arizona-core - Trivial formatting; arizona-core - Add low-power-sleep; arizona-core - IRQ ONESHOT changes; twl4030-irq, mc13xxx-core, wm831x-auxadc, htc-i2cpld, wm8350-core, ab8500-debugfs, ab8500-gpadc, si476x-i2c (Re-)moved drivers: - Move protocol helpers out to drivers/platform; cros_ec New drivers/supported devices: - Add support for AXP22x into axp20x - Add support for OnKey into da9063-core - Add support for Pinctrl into mt6397-core - New STMicroelectronics LPC Watchdog driver - New STMicroelectronics LPC Real-Time Clock driver" * tag 'mfd-for-linus-4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (59 commits) mfd: lpc_ich: Assign subdevice ids automatically mfd: si476x-i2c: Pass the IRQF_ONESHOT flag mfd: ab8500-gpadc: Pass the IRQF_ONESHOT flag mfd: ab8500-debugfs: Pass the IRQF_ONESHOT flag mfd: wm8350-core: Pass the IRQF_ONESHOT flag mfd: htc-i2cpld: Pass the IRQF_ONESHOT flag mfd: wm831x-auxadc: Pass the IRQF_ONESHOT flag mfd: mc13xxx-core: Pass the IRQF_ONESHOT flag mfd: twl4030-irq: Pass the IRQF_ONESHOT flag mfd: mt6397-core: Add GPIO sub-module support mfd: arizona: Add convience defines for micd_rate/micd_bias_starttime mfd: dt: Add bindings for DA9063 OnKey mfd: da9063: Add support for OnKey driver mfd: arizona: Fix incorrect Makefile conditionals mfd: arizona: Add stub for wm5102_patch() mfd: Check ACPI device companion before checking resources Documentation: Add WM8998/WM1814 device tree bindings mfd: arizona: Split INx_MODE into two fields mfd: wm5110: Add delay before releasing reset line mfd: arizona: Add better support for system suspend ...
This commit is contained in:
@@ -1103,7 +1103,7 @@ config I2C_SIBYTE
|
||||
|
||||
config I2C_CROS_EC_TUNNEL
|
||||
tristate "ChromeOS EC tunnel I2C bus"
|
||||
depends on MFD_CROS_EC
|
||||
depends on CROS_EC_PROTO
|
||||
help
|
||||
If you say yes here you get an I2C bus that will tunnel i2c commands
|
||||
through to the other side of the ChromeOS EC to the i2c bus
|
||||
|
@@ -182,8 +182,9 @@ static int ec_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg i2c_msgs[],
|
||||
const u16 bus_num = bus->remote_bus;
|
||||
int request_len;
|
||||
int response_len;
|
||||
int alloc_size;
|
||||
int result;
|
||||
struct cros_ec_command msg = { };
|
||||
struct cros_ec_command *msg;
|
||||
|
||||
request_len = ec_i2c_count_message(i2c_msgs, num);
|
||||
if (request_len < 0) {
|
||||
@@ -198,25 +199,39 @@ static int ec_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg i2c_msgs[],
|
||||
return response_len;
|
||||
}
|
||||
|
||||
result = ec_i2c_construct_message(msg.outdata, i2c_msgs, num, bus_num);
|
||||
if (result)
|
||||
return result;
|
||||
alloc_size = max(request_len, response_len);
|
||||
msg = kmalloc(sizeof(*msg) + alloc_size, GFP_KERNEL);
|
||||
if (!msg)
|
||||
return -ENOMEM;
|
||||
|
||||
msg.version = 0;
|
||||
msg.command = EC_CMD_I2C_PASSTHRU;
|
||||
msg.outsize = request_len;
|
||||
msg.insize = response_len;
|
||||
result = ec_i2c_construct_message(msg->data, i2c_msgs, num, bus_num);
|
||||
if (result) {
|
||||
dev_err(dev, "Error constructing EC i2c message %d\n", result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = cros_ec_cmd_xfer(bus->ec, &msg);
|
||||
if (result < 0)
|
||||
return result;
|
||||
msg->version = 0;
|
||||
msg->command = EC_CMD_I2C_PASSTHRU;
|
||||
msg->outsize = request_len;
|
||||
msg->insize = response_len;
|
||||
|
||||
result = ec_i2c_parse_response(msg.indata, i2c_msgs, &num);
|
||||
if (result < 0)
|
||||
return result;
|
||||
result = cros_ec_cmd_xfer(bus->ec, msg);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Error transferring EC i2c message %d\n", result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
result = ec_i2c_parse_response(msg->data, i2c_msgs, &num);
|
||||
if (result < 0) {
|
||||
dev_err(dev, "Error parsing EC i2c message %d\n", result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Indicate success by saying how many messages were sent */
|
||||
return num;
|
||||
result = num;
|
||||
exit:
|
||||
kfree(msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
static u32 ec_i2c_functionality(struct i2c_adapter *adap)
|
||||
|
Reference in New Issue
Block a user