Re: ACPI SPI slave device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 I finally got the SPI slave enumerated....by modifying the DSDT table

P: /devices/pci0000:00/0000:00:15.4/pxa2xx-spi.0/spi_master/spi0/spi-APP000D:00
E: DEVPATH=/devices/pci0000:00/0000:00:15.4/pxa2xx-spi.0/spi_master/spi0/spi-APP000D:00
E: ID_VENDOR_FROM_DATABASE=Apple Computer Inc
E: MODALIAS=acpi:APP000D:APPLE-SPI-TOPCASE:
E: SUBSYSTEM=spi
E: USEC_INITIALIZED=27944872

/proc/acpi/wakeup
Device S-state  Status   Sysfs node
SPIT  S3 *disabled   spi:spi-APP000D:00

I'll post more tomorrow, need to evaluate the changes I made --but I
think the change that did it was changing this:

Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
{
    If (!OSDW ())
    {
        Return (WBUF) /* \_SB_.PCI0.SPI1.WBUF */
    }

    Return (ConcatenateResTemplate (RBUF, DBUF))
}

to:

Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
{
      Return (ConcatenateResTemplate (RBUF, DBUF))
}

On Wed, Mar 2, 2016 at 12:33 AM, Leif Liddy <leif.linux@xxxxxxxxx> wrote:
> Thanks for that!!!
>
> Ok, I added a few more printk statments to spi.c. It looks like the
> root cause of the issue is that the
> "ares->type == ACPI_RESOURCE_TYPE_SERIAL_BUS" check is failing.
>
> pxa2xx-spi pxa2xx-spi.0: found DMA channel "tx" at index 0
> xxx resource.c acpi_dev_get_resources acpi_dev_name=INT33C1:00 returns
> c.count 0...
> dma dma0chan0: dwc_alloc_chan_resources: allocated 64 descriptors
> dmaengine: __dma_request_channel: success (dma0chan0)
> pxa2xx-spi pxa2xx-spi.0: found DMA channel "rx" at index 1
> xxx resource.c acpi_dev_get_resources acpi_dev_name=INT33C1:00 returns
> c.count 0...
> dmaengine: private_candidate: dma0chan0 busy
> dma dma0chan1: dwc_alloc_chan_resources: allocated 64 descriptors
> dmaengine: __dma_request_channel: success (dma0chan1)
> pxa2xx-spi pxa2xx-spi.0: registered master spi0
> xxx spi.c acpi_register_spi_devices acpi_handle is ffff8802650bdcd0 (INT33C1:00)
> xxx spi.c acpi_spi_add_device() start
> xxx spi.c *spi_alloc_device() start
> xxx spi.c acpi_spi_add_device acpi_dev_name=APP000D:00
> xxx spi.c acpi_spi_add_resource() start
> xxx spi.c acpi_spi_add_resource spi->irq = -1
> xxx spi.c acpi_spi_add_resource failed check: ares->type ==
> ACPI_RESOURCE_TYPE_SERIAL_BUS
> xxx spi.c acpi_spi_add_resource :else if (spi->irq < 0)
> xxx spi.c acpi_spi_add_resource return 1
> xxx resource.c acpi_dev_get_resources acpi_dev_name=APP000D:00 returns
> c.count 0...
> xxx spi.c acpi_spi_add_device ret returns 0
> xxx spi.c acpi_spi_add_device spi->max_speed_hz is 0
> xxx spi.c acpi_spi_add_device  (ret < 0 || !spi->max_speed_hz) --->
> spi_dev_put(spi) --> return AE_OK
>
>
> I assume it's looking for SpiSerialBus in  the _CRS method,  not sure
> why it can't find it. I wonder if there's a way to just manually
> configure the slave device.
>
>
>  Device (SPIT)
>    {
>      Name (_HID, EisaId ("APP000D"))  // _HID: Hardware ID
>      .....
>
>     Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
>     {
>         Name (UBUF, ResourceTemplate ()
>         {
>             SpiSerialBus (0x0000, PolarityLow, FourWireMode, 0x08,
>                 ControllerInitiated, 0x007A1200, ClockPolarityLow,
>                 ClockPhaseFirst, "\\_SB.PCI0.SPI1",
>                 0x00, ResourceConsumer, ,
>                 )
>             Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
>             {
>                 0x0000001E,
>             }
>         })
>         Name (ABUF, ResourceTemplate ()
>         {
>         })
>         If (!OSDW ())
>         {
>             Return (UBUF) /* \_SB_.PCI0.SPI1.SPIT._CRS.UBUF */
>         }
>
>        Return (ABUF) /* \_SB_.PCI0.SPI1.SPIT._CRS.ABUF */
>    }
>
> On Tue, Mar 1, 2016 at 5:07 PM, Lukas Wunner <lukas@xxxxxxxxx> wrote:
>> Hi Leif,
>>
>> On Tue, Mar 01, 2016 at 04:42:18PM +0100, Leif Liddy wrote:
>>> Do you know how I could print out the the name or id of the ACPI
>>> device from the acpi_device pointer?
>>
>> printk("acpi_dev_name=%s\n", acpi_dev_name(adev));
>>
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/acpi.h#n83
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/acpi/acpi_bus.h#n354
>>
>> Best regards,
>>
>> Lukas
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux