From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pierre-Louis Bossart Subject: Re: [WM5102/ARIZONA] spi driver needs to support ACPI Date: Thu, 04 Jun 2015 09:57:17 -0500 Message-ID: <5570674D.9050708@linux.intel.com> References: <555A1357.3090905@linux.intel.com> <556DF265.6000209@linux.intel.com> <556F166E.5040009@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by alsa0.perex.cz (Postfix) with ESMTP id B6028260831 for ; Thu, 4 Jun 2015 16:57:22 +0200 (CEST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Christian Hartmann Cc: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org On 6/4/15 2:23 AM, Christian Hartmann wrote: > hi, > > her is the dsdt.dsl in readable format (looks better) So this confirms my initial assertion that whoever wrote the BIOS has a limited understanding of ACPI. WM5102 isn't a well-formed _HID, the prefix *has* to be a 4-letter ACPI ID or a 4-hex-number PCI ID. the code will work but violates the rules of the standard. At any rate, you would indeed to add this string in the table in sst-acpi and add a reference to a machine driver (e.g. byt-wm5102) to get your sound card registered. > > 2015-06-03 16:59 GMT+02:00 Pierre-Louis Bossart > : >> On 6/3/15 2:50 AM, Christian Hartmann wrote: >>> >>> hi, >>> >>> thanks Pierre-Luis, >>> >>> I attach the DSDT table in ASM format to get this device working as >>> soon as possible. >> >> >> this format is unreadable, can you extract the plain DSL instead, e.g. with >> iasl -d dsdt.dat -> extracts dsdt.dsl with only the code in 'human-readable' >> format. >> >> >>> >>> By the way, I looked yesterday into the baytrail code (sound/soc/intel/sst >>> ) >>> and I added this WM510205 codec.... but I do not know if I have it >>> done correctly... currently I test my latest changes, seems to not >>> work as expected yet. >>> >>> >>> cheers >>> chris >>> >>> >>> 2015-06-02 20:13 GMT+02:00 Pierre-Louis Bossart >>> : >>>> >>>> On 06/02/2015 03:34 AM, Christian Hartmann wrote: >>>>> >>>>> hi list again, >>>>> >>>>> I have patched the torvalds/master branch currently rc6 >>>>> and I have no NULL pointer exception anymore. >>>>> >>>>> I will send each patch separately >>>>> >>>>> Of course no (working) soundcard yet.. >>>>> >>>>> so let be try to describe what is actually open or resolved for me: >>>>> >>>>> * the spi master 37622 (pxa2xx) does not fail to add the SPI slave >>>>> spi-WM510205 >>>>> pxa2xx-spi 80860F0E:00: registered child spi-WM510205:00 >>>>> >>>>> * ALSA device list: no soundcards found >>>>> * in dmesg I found two message indicating that something seems to be >>>>> missing yet: >>>>> >>>>> sst-acpi 80860F28:00: No matching ASoC machine driver found >>>>> intel-sst-acpi 80860F28:00: No matching machine driver found >>>>> >>>>> >>>>> snip of dmesg 4.1.0.42-rc6 >>>>> >>>>> >>>>> [ 6.075170] sst-acpi 80860F28:00: No matching ASoC machine driver >>>>> found >>>>> [ 6.106787] pxa2xx-spi 80860F0E:00: no DMA channels available, using >>>>> PIO >>>>> [ 6.106865] pxa2xx-spi 80860F0E:00: registered master spi32766 >>>>> (dynamic) >>>>> [ 6.107058] spi spi-WM510205:00: 8333333 Hz actual, PIO >>>>> [ 6.107065] spi spi-WM510205:00: setup mode 0, 8 bits/w, 8000000 Hz >>>>> max --> 0 >>>>> [ 6.107151] pxa2xx-spi 80860F0E:00: registered child spi-WM510205:00 >>>>> [ 6.114510] rfkill_gpio LNV4752:00: GPIO lookup for consumer reset >>>>> [ 6.114519] rfkill_gpio LNV4752:00: using ACPI for GPIO lookup >>>>> [ 6.114526] acpi LNV4752:00: GPIO: looking up reset-gpios >>>>> [ 6.114533] acpi LNV4752:00: GPIO: _DSD returned LNV4752:00 3 0 0 0 >>>>> [ 6.114607] no flags found for reset >>>>> [ 6.114619] rfkill_gpio LNV4752:00: GPIO lookup for consumer shutdown >>>>> [ 6.114623] rfkill_gpio LNV4752:00: using ACPI for GPIO lookup >>>>> [ 6.114628] acpi LNV4752:00: GPIO: looking up shutdown-gpios >>>>> [ 6.114633] acpi LNV4752:00: GPIO: _DSD returned LNV4752:00 3 1 0 0 >>>>> [ 6.114669] acpi LNV4752:00: GPIO: looking up shutdown-gpio >>>>> [ 6.114675] acpi LNV4752:00: GPIO: looking up 0 in _CRS >>>>> [ 6.114711] gpio-411 (reset): gpiod_request: status -16 >>>>> [ 6.114849] rfkill_gpio LNV4752:00: LNV4752:00 device registered. >>>>> [ 6.247784] intel_sst_acpi 80860F28:00: No matching machine driver >>>>> found >>>>> >>>>> >>>>> I have grepped the string 80860F28 in the ACPI DSDT table (-> >>>>> dsdt.dsl) and found >>>>> >>>>> { >>>>> Device (LPEA) >>>>> { >>>>> Name (_ADR, Zero) // _ADR: Address >>>>> Name (_HID, "80860F28" /* Intel SST Audio DSP */) // >>>>> _HID: Hardware ID >>>>> Name (_CID, "80860F28" /* Intel SST Audio DSP */) // >>>>> _CID: Compatible ID >>>>> Name (_DDN, "Intel(R) Low Power Audio Controller - >>>>> 80860F28") // _DDN: DOS Device Name >>>>> Name (_SUB, "17AA7004") // _SUB: Subsystem ID >>>>> Name (_UID, One) // _UID: Unique ID >>>>> Name (_DEP, Package (0x01) // _DEP: Dependencies >>>>> { >>>>> ^SPI1.AUDI >>>>> }) >>>>> Name (_PR0, Package (0x01) // _PR0: Power Resources for D0 >>>>> { >>>>> PLPE >>>>> }) >>>>> Method (_STA, 0, NotSerialized) // _STA: Status >>>>> { >>>>> If (LAnd (LEqual (LPEE, 0x02), LEqual (LPED, Zero))) >>>>> { >>>>> Return (0x0F) >>>>> } >>>>> >>>>> Return (Zero) >>>>> } >>>>> >>>>> So how to bind the intel_sst_acpi with the WM5102 arizona coded and >>>>> its hub named arizone ??? >>>>> >>>>> Any suggestions or new directions? >>>> >>>> >>>> In your DSDT table, you need to leave the LPEA device alone. this is >>>> Intel only >>>> >>>> You will need to have a second device for your codec that is either a >>>> child of the I2C (or SPI?) controllers. This second device will have an HID >>>> that you need to include in the sst-acpi.c code. when the LPEA driver >>>> starts, it will look if this codec HID is present and if yes load the >>>> relevant machine driver and firmware. >>>> >>>> see for example the baytrail code, it uses the codec ID to identify which >>>> machine driver is needed. this is where you would need to add the wolfson >>>> HID. >>>> >>>> static struct sst_acpi_mach baytrail_machines[] = { >>>> { "10EC5640", "byt-rt5640", >>>> "intel/fw_sst_0f28.bin-48kHz_i2s_master" }, >>>> { "193C9890", "byt-max98090", >>>> "intel/fw_sst_0f28.bin-48kHz_i2s_master" }, >>>> {} >>>> }; >>>> >>>> >>>> Maybe you can share your DSDT table (factory settings) if you want more >>>> help. >>>> Also note that HIDs are specified based on rules defined by uefi.org, the >>>> "WM5102" does not follow any of the usual conventions. My guess is that the >>>> HID should be prefixed by the Wolfson PCI vendor ID. >>>> >>>> >>>>> .... >>>>> >>>>> >>>>> cheers >>>>> chris >>>>> >>>>> >>>>> 2015-05-19 15:39 GMT+02:00 Christian Hartmann : >>>>>> >>>>>> Hi, >>>>>> >>>>>> at the moment I am totally confused. I thought adding an ACPI ID is >>>>>> trivial, but it is not. >>>>>> >>>>>> I have again a null pointer exception in arizona_spi_probe() >>>>>> >>>>>> could it be with the new num_chipselect value in spi-pxa2xx.c ?? >>>>>> I attach the trace of the last try >>>>>> >>>>>> Any hints or tips are welcome. >>>>>> >>>>>> cheers >>>>>> chris >>>>>> >>>>>> 2015-05-19 11:04 GMT+02:00 Christian Hartmann >>>>>> : >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> so the ACPI id string, which I want to add to arizona-spi.c should be >>>>>>> >>>>>>> WM510205 ?? >>>>>>> >>>>>>> I have changed the ACPI string to >>>>>>> >>>>>>> {"WM510205", WM5102}, >>>>>>> >>>>>>> now and give it a try. >>>>>>> >>>>>>> cheers >>>>>>> chris >>>>>>> >>>>>>> 2015-05-18 18:29 GMT+02:00 Pierre-Louis Bossart >>>>>>> : >>>>>>>> >>>>>>>> On 5/15/15 4:16 AM, Christian Hartmann wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>> Hi list, >>>>>>>>> >>>>>>>>> >>>>>>>>> I need ACPI support for the arizona-core / arizona-spi driver for >>>>>>>>> the >>>>>>>>> ACPI ID WM5102. >>>>>>>>> This audio codec is build into the Lenovo Yoga 851F. This device is >>>>>>>>> a >>>>>>>>> 32Bit (UEFI) system >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> http://support.lenovo.com/de/de/products/tablets/yoga-series/yoga-tablet-2-851 >>>>>>>>> >>>>>>>>> >>>>>>>>> I have tested with vanilla kernels from kernel.org 3.19.y ,4.0.y and >>>>>>>>> master (from torvalds) currently its 4.1.0-rc3. As distribution I am >>>>>>>>> working with Fedora / Fedlet was the initial install image. >>>>>>>>> >>>>>>>>> With all vanilla kernels I got at first an error message from >>>>>>>>> spi32766: >>>>>>>>> >>>>>>>>> [ 0.296297] pxa2xx-spi 80860F0E:00: cs1 >= max 1 >>>>>>>>> [ 0.296311] spi_master spi32766: failed to add SPI device >>>>>>>>> WM510205:00 from ACPI >>>>>>>>> >>>>>>>>> so I have at first patched as suggested by broonie the arizona-core >>>>>>>>> >>>>>>>>> commit 48203a0fede057d6a8c5f6872c53326395350f45 >>>>>>>>> Author: somebody anybody >>>>>>>>> Date: Mon May 11 13:35:43 2015 +0200 >>>>>>>>> >>>>>>>>> spi-pxa2xx : raise chipselect >>>>>>>>> >>>>>>>>> Signed-off-by: somebody anybody >>>>>>>>> >>>>>>>>> diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c >>>>>>>>> index e3223ac..9c919ea 100644 >>>>>>>>> --- a/drivers/spi/spi-pxa2xx.c >>>>>>>>> +++ b/drivers/spi/spi-pxa2xx.c >>>>>>>>> @@ -1279,7 +1279,7 @@ pxa2xx_spi_acpi_get_pdata(struct >>>>>>>>> platform_device >>>>>>>>> *pdev) >>>>>>>>> if (adev->pnp.unique_id && !kstrtoint(adev->pnp.unique_id, >>>>>>>>> 0, >>>>>>>>> &devid)) >>>>>>>>> ssp->port_id = devid; >>>>>>>>> >>>>>>>>> - pdata->num_chipselect = 1; >>>>>>>>> + pdata->num_chipselect = 20; >>>>>>>>> pdata->enable_dma = true; >>>>>>>>> >>>>>>>>> return pdata; >>>>>>>>> >>>>>>>>> This leds the spi master do the further ACPI configuration and >>>>>>>>> inital >>>>>>>>> setup for the arizona-spi device, but adding the ACPI ID to it >>>>>>>>> does not work yet as expected: >>>>>>>>> >>>>>>>>> The current last patchset on top of master is >>>>>>>>> >>>>>>>>> >>>>>>>>> Author: somebody anybody >>>>>>>>> Date: Wed May 13 11:36:25 2015 +0200 >>>>>>>>> >>>>>>>>> arizona : added ACPI id of wm5102 to SPI driver, too >>>>>>>>> >>>>>>>>> Signed-off-by: somebody anybody >>>>>>>>> >>>>>>>>> diff --git a/drivers/mfd/arizona-spi.c b/drivers/mfd/arizona-spi.c >>>>>>>>> index 1e845f6..c19a4c1 100644 >>>>>>>>> --- a/drivers/mfd/arizona-spi.c >>>>>>>>> +++ b/drivers/mfd/arizona-spi.c >>>>>>>>> @@ -17,6 +17,7 @@ >>>>>>>>> #include >>>>>>>>> #include >>>>>>>>> #include >>>>>>>>> +#include >>>>>>>>> #include >>>>>>>>> >>>>>>>>> #include >>>>>>>>> @@ -82,6 +83,15 @@ static int arizona_spi_remove(struct spi_device >>>>>>>>> *spi) >>>>>>>>> return 0; >>>>>>>>> } >>>>>>>>> >>>>>>>>> +#ifdef CONFIG_ACPI >>>>>>>>> +static struct acpi_device_id wm5102_acpi_match[] = { >>>>>>>>> + { "WM5102", 0}, >>>>>>>>> + { "WM510205", 0}, >>>>>>>>> + { }, >>>>>>>>> +}; >>>>>>>>> +MODULE_DEVICE_TABLE(acpi, wm5102_acpi_match); >>>>>>>>> +#endif >>>>>>>>> + >>>>>>>>> static const struct spi_device_id arizona_spi_ids[] = { >>>>>>>>> { "wm5102", WM5102 }, >>>>>>>>> { "wm5110", WM5110 }, >>>>>>>>> @@ -96,6 +106,9 @@ static struct spi_driver arizona_spi_driver = { >>>>>>>>> .owner = THIS_MODULE, >>>>>>>>> .pm = &arizona_pm_ops, >>>>>>>>> .of_match_table = of_match_ptr(arizona_of_match), >>>>>>>>> +#ifdef CONFIG_ACPI >>>>>>>>> + .acpi_match_table = ACPI_PTR(wm5102_acpi_match), >>>>>>>>> +#endif >>>>>>>>> }, >>>>>>>>> .probe = arizona_spi_probe, >>>>>>>>> .remove = arizona_spi_remove, >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> commit 268e21d29c942205e40f749c6d71c77839dc67da >>>>>>>>> Author: somebody anybody >>>>>>>>> Date: Wed May 13 11:36:04 2015 +0200 >>>>>>>>> >>>>>>>>> arizona : added ACPI id of wm5102 to i2c driver >>>>>>>>> >>>>>>>>> Signed-off-by: somebody anybody >>>>>>>>> >>>>>>>>> diff --git a/drivers/mfd/arizona-i2c.c b/drivers/mfd/arizona-i2c.c >>>>>>>>> index ff782a5..45ece1b 100644 >>>>>>>>> --- a/drivers/mfd/arizona-i2c.c >>>>>>>>> +++ b/drivers/mfd/arizona-i2c.c >>>>>>>>> @@ -18,6 +18,7 @@ >>>>>>>>> #include >>>>>>>>> #include >>>>>>>>> #include >>>>>>>>> +#include >>>>>>>>> >>>>>>>>> #include >>>>>>>>> >>>>>>>>> @@ -85,6 +86,15 @@ static int arizona_i2c_remove(struct i2c_client >>>>>>>>> *i2c) >>>>>>>>> return 0; >>>>>>>>> } >>>>>>>>> >>>>>>>>> +#ifdef CONFIG_ACPI >>>>>>>>> +static struct acpi_device_id wm5102_acpi_match[] = { >>>>>>>>> + { "WM5102", 0}, >>>>>>>>> + { "WM510205", 0}, >>>>>>>>> + { }, >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Those IDs don't really look like ACPI ones? Isn't there a rule that >>>>>>>> the _HID >>>>>>>> is represented by a 4-letter vendor ID followed by part ID? see >>>>>>>> http://www.uefi.org/PNP_ACPI_Registry >>>>>>>> >>>>>>>> >>>>>>>>> +}; >>>>>>>>> +MODULE_DEVICE_TABLE(acpi, wm5102_acpi_match); >>>>>>>>> +#endif >>>>>>>>> + >>>>>>>>> static const struct i2c_device_id arizona_i2c_id[] = { >>>>>>>>> { "wm5102", WM5102 }, >>>>>>>>> { "wm5110", WM5110 }, >>>>>>>>> @@ -100,6 +110,9 @@ static struct i2c_driver arizona_i2c_driver = { >>>>>>>>> .owner = THIS_MODULE, >>>>>>>>> .pm = &arizona_pm_ops, >>>>>>>>> .of_match_table = of_match_ptr(arizona_of_match), >>>>>>>>> +#ifdef CONFIG_ACPI >>>>>>>>> + .acpi_match_table = ACPI_PTR(wm5102_acpi_match), >>>>>>>>> +#endif >>>>>>>>> }, >>>>>>>>> .probe = arizona_i2c_probe, >>>>>>>>> .remove = arizona_i2c_remove, >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> with these two patches the local master branch compiles fine, but at >>>>>>>>> initialzing the arizona-spi driver gots a NULL pointer exception. >>>>>>>>> >>>>>>>>> I attach the whole dmesg of 4.1.0-rc3 (build 4.1.0.24-rc3). >>>>>>>>> >>>>>>>>> I need some assistance or hints to the right direction, I am looking >>>>>>>>> myself and I also try what I can, but I think it would be easy peasy >>>>>>>>> with some experts like here on this list :) >>>>>>>>> >>>>>>>>> >>>>>>>>> PS: the message : spi_master spi32766: raised num_chipselect to 20 >>>>>>>>> for >>>>>>>>> WM510205:00 >>>>>>>>> >>>>>>>>> is a dev_err() line added to the function static acpi_status >>>>>>>>> acpi_spi_add_device(), there I had raised the num_chipselect first >>>>>>>>> (that was wrong, the raise is now done as in the first patch above. >>>>>>>>> this is only a debug message and will be removed soon) >>>>>>>>> >>>>>>>>> >>>>>>>>> PPS: for me it seems that there is a missing 'link' from WM5102 to >>>>>>>>> the >>>>>>>>> sst-acpi 80860F28:00 device, which complaints NOW / the first time >>>>>>>>> with the three patches applied on top on master.... will have a look >>>>>>>>> into it. >>>>>>>>> >>>>>>>>> I hope I got this device working with some more help from you. >>>>>>>>> >>>>>>>>> cheers >>>>>>>>> chris >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Alsa-devel mailing list >>>>>>>>> Alsa-devel@alsa-project.org >>>>>>>>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel >>>>>>>>> >>>>>>> >>>>> _______________________________________________ >>>>> Alsa-devel mailing list >>>>> Alsa-devel@alsa-project.org >>>>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel >>>>> >>>> >>> >>> >>> >> > > >