MFD ASL for KEMPLD

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

 



Hi Folks,

I've been trying to use an ASL to help me add a bunch of I2C devices to my platform; to start with, I'd like to just add an I2C MUX, but have so far been unable to get the kernel to add my I2C device. I suspect this might have something to do with the I2C adapter being under a MFD driver, but am hoping I might be able to get a few pointers from here to help me get this working.

I've defined the following ASL:

#define I2C_SPEED 100000
#define ACPI_DT_NAMESPACE_HID "PRP0001"

DefinitionBlock ("example.aml", "SSDT", 5, "vendor", "board", 1)
{
	External (\_SB.PCI0.SBRG.CPLD, DeviceObj)

	Scope (\_SB.PCI0.SBRG.CPLD)
	{
		Device (MUX0)
		{
			Name (_HID, ACPI_DT_NAMESPACE_HID)
			Name (_DDN, "NXP PCA9546 I2C Mux")

			Name (_CRS, ResourceTemplate()
			{
				I2cSerialBus(0x77, ControllerInitiated, I2C_SPEED , AddressingMode7Bit, "\\_SB.PCI0.SBRG.CPLD", 0x00, ResourceConsumer,,)
			})

			Name (_DSD, Package () 
			{
				ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
				Package () 
				{
					Package () { "compatible", "nxp,pca9546" },
				}
			})
		}
	}
}

I'm able to load the corresponding aml by 'cat'ing into /sys/kernel/config/acpi/table/mytable/aml. This loads without any errors, and I can see my new node appear in /sys:

root@694b71 [x86]:~# ls /sys/bus/acpi/devices/KEM0001\:00/
PRP0001:00/     modalias        physical_node/  physical_node2/ physical_node4/ status          uevent
hid             path            physical_node1/ physical_node3/ power/          subsystem/      uid
root@694b71 [x86]:~# ls /sys/bus/acpi/devices/KEM0001\:00/PRP0001\:00/
hid  modalias  path  power  subsystem  uevent

Unfortunately, it doesn't add the i2c device and the I2C address (0x77) remains unclaimed:
root@694b71 [x86]:~# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- 0c -- -- -- 
10: -- -- -- -- 14 15 16 -- 18 19 1a 1b -- 1d -- -- 
20: 20 -- -- 23 24 -- -- -- -- -- -- -- -- -- -- 2f 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- 44 45 46 -- -- -- 4a 4b -- 4d -- -- 
50: 50 51 -- -- -- 55 -- -- -- -- -- -- -- -- -- -- 
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77                         

The I2C adapter is from drivers/i2c/busses/i2c-kempld.c, which is loaded by drivers/mfd/kempld-core.c. 

I can manually add the device (successfully) by echo'ing the appropriate line into i2c-1/new_device, but this isn't the approach I want to take for adding I2C devices to this platform, particularly as some of them will require a number of configuration elements that are normally set via a device tree (on OF platforms).

Any thoughts on what I might be doing wrong here? Or what changes I might need to make to the existing drivers to make this work?

Thanks,
Chris




[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