Fwd: [alsa-devel] [PATCH 1/1] SPI : spi-pxa2xx : fix spi init of WM510205 codec via ACPI (resend)

Christian Hartmann
2015-06-25T12:18:23Z

[-- Attachment #1: Type: text/plain, Size: 5481 bytes --]

Hi Mika, Dan et al.

@Dan : thank you, I will use get_maintainer.pl as of now.

@Mika: you mean I should prepare a new DSDT table and in this case
overwrite the SPI value there with the 0 and load it (the DSDT table
) into a custom kernel build ?? I will do this (cause all what I want
is to enable the codec and to hear sound)

currently I have in the extracted DSDT table from this device the SPI1
controller for the "AUDI" device as seen in this snippet :

Scope (_SB)
{
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
})

.... some lines later follows the AUDI device with
Device (AUDI)
{
Name (_HID, "WM510205") // _HID: Hardware ID
Name (_CID, "WM510205") // _CID: Compatible ID
Name (_DDN, "Wolfson Microelectronics Audio WM5102")
// _DDN: DOS Device Name
Method (_CRS, 0, NotSerialized) // _CRS: Current
Resource Settings
{
Name (SBUF, ResourceTemplate ()
{
SpiSerialBus (0x0001, PolarityLow, FourWireMode, 0x08,
ControllerInitiated, 0x007A1200, ClockPolarityLow,
ClockPhaseFirst, "\\_SB.SPI1",
0x00, ResourceConsumer, ,
)
GpioInt (Edge, ActiveLow, ExclusiveAndWake,
PullNone, 0x0000,
"\\_SB.GPO2", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0004
}
GpioIo (Exclusive, PullDefault, 0x0000,
0x0000, IoRestrictionOutputOnly,
"\\_SB.I2C7.PMIC", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0003
}
GpioIo (Exclusive, PullDefault, 0x0000,
0x0000, IoRestrictionOutputOnly,
"\\_SB.GPO1", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0017
}
})
Return (SBUF) /* \_SB_.SPI1.AUDI._CRS.SBUF */
}
....

I t makes sense to me, to change the current value(s) in the DSDT and
I have read about it to use a custom DSDT table but I am not 100% sure
yet (until I have tested it).

If I understand you correct, than all I have to do is to change the
'SPI1' string in this dsdt to SPI0 like
^SPI1.AUDI to ^SPI0.AUDI and this block here
SpiSerialBus (0x0001, PolarityLow, FourWireMode, 0x08,
ControllerInitiated, 0x007A1200, ClockPolarityLow,
ClockPhaseFirst, "\\_SB.SPI1",
0x00, ResourceConsumer, ,

becomes
SpiSerialBus (0x0000, PolarityLow, FourWireMode, 0x08,
ControllerInitiated, 0x007A1200, ClockPolarityLow,
ClockPhaseFirst, "\\_SB.SPI0",
0x00, ResourceConsumer, ,

For this case, could you please have a look in the whole DSDT table
that I extract from this device? If nothing else seems relevant and
the current system dsdt has to be changed as suggested, I will try
this out as soon as possible

@Jarkko : as you suggested , I attach the current system DSDT as a
binary. I have also disassembled,
and if someone needs it, I can also paste it somewhere else as a reference

After all I will assembly the new dsdt and include it in my custom
kernel builld as documented, but will wait for some new infos etc.

thank you for you answers @all

cheers
chris

2015-06-25 9:36 GMT+02:00 Mika Westerberg <mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>:
> On Thu, Jun 25, 2015 at 09:29:31AM +0200, Christian Hartmann wrote:
>> Hello Maintainer(s)s of SPI,
>>
>> hope I got all of you maintainers now. This email was already sent out
>> last week to the alsa-devel list and I resent it here to you.
>>
>> I have one patch that enables the spi initialization of the WM510205 audio codec
>> Without the patch, this message indicates that the codec chip fails
>> with the current chipselect number in spi-pxa2xx:
>>
>>
>> [ 0.296256] pxa2xx-spi 80860F0E:00: cs1 >= max 1
>> [ 0.296270] spi_master spi32766: failed to add SPI device
>> WM510205:00 from ACPI
>>
>> So raise num_chipselect by one to enable the codec. The WM510202 is on
>> chipselect = 1.
>
> The hardware only has one chipselect.
>
> You can fix this by specifying the correct chipselect in the ACPI
> SpiSerialBus connector:
>
> SpiSerialBus (0, PolarityLow, FourWireMode, 8, ControllerInitiated, ..
>
> First parameter is the chipselect.

[-- Attachment #2: DSDT_sys_firmware_acpi_tables.bin --]
[-- Type: application/octet-stream, Size: 42677 bytes --]