+static void tas2563_fixup_i2c(struct hda_codec *cdc,
- const struct hda_fixup *fix, int action)
+{
tas2xxx_generic_fixup(cdc, action, "i2c", "INT8866");
Any specific reason to use an Intel ACPI identifier? Why not use "TIAS2563" ?
INT8866 is in the ACPI. I don't know why Lenovo uses this name. I think it's more internal than intel.
Scope (_SB.I2CD) { Device (TAS) { Name (_HID, "INT8866") // _HID: Hardware ID
Ouch, I hope they checked with Intel that this isn't an HID already in use...
Name (_UID, Zero) // _UID: Unique ID Method (_CRS, 0, NotSerialized) // _CRS: Current Resource
Settings { Name (RBUF, ResourceTemplate () { I2cSerialBusV2 (0x004C, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "\_SB.I2CD", 0x00, ResourceConsumer, , Exclusive, ) I2cSerialBusV2 (0x004D, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "\_SB.I2CD", 0x00, ResourceConsumer, , Exclusive, ) GpioInt (Edge, ActiveLow, SharedAndWake, PullNone, 0x0000, "\_SB.GPIO", 0x00, ResourceConsumer, , ) { // Pin list 0x0020 } }) Return (RBUF) /* _SB_.I2CD.TAS_._CRS.RBUF */ }
Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) } } }
+static int tas2563_system_resume(struct device *dev) +{
- int ret;
- struct tas2563_data *tas2563 = dev_get_drvdata(dev);
- dev_dbg(tas2563->dev, "System Resume\n");
- ret = pm_runtime_force_resume(dev);
- if (ret)
return ret;
- for (int i = 0; i < tas2563->ndev; ++i)
tas2563_tasdev_setup(tas2563, &tas2563->tasdevs[i]);
- return 0;
+}
+static const struct dev_pm_ops tas2563_hda_pm_ops = {
- SYSTEM_SLEEP_PM_OPS(tas2563_system_suspend, tas2563_system_resume)
where's the pm_runtime stuff?
The amp stores its state in software shutdown mode. The tas2563_hda_playback_hook wakes/shutdowns the amp, not the pm_runtime.
My point was that you have all these pm_runtime_ calls in the code, but nothing that provides pm_runtime suspend-resume functions so not sure what exactly the result is?