OF devices and non OF devices

Kári Davíðsson kari.davidsson at marel.is
Wed Jul 18 21:13:52 EST 2007


Yes there was indeed.

Combination of my misunderstanding, device trees and board specific initialization.

Things are working now.

Thanks,
kd


________________________________

From: John Rigby [mailto:jcrigby at gmail.com] 
Sent: 5. júlí 2007 17:21
To: Kári Davíðsson
Cc: linuxppc-embedded at ozlabs.org
Subject: Re: OF devices and non OF devices


There must be something else wrong with your configuration.
On my Lite5200B fsl_i2c_probe gets called with no changes to the driver.

The kernel version is 2.6.22-rc7

The relevant part of my device tree is: 

        i2c at 3d00 {
            device_type = "i2c";
            compatible = "mpc5200b-i2c\0mpc5200-i2c\0fsl-i2c";
            cell-index = <0>;
            reg = <3d00 40>; 
            interrupts = <2 f 0>;
            interrupt-parent = <&mpc5200_pic>;
            fsl5200-clocking;
        };

        i2c at 3d40 {
            device_type = "i2c"; 
            compatible = "mpc5200b-i2c\0mpc5200-i2c\0fsl-i2c";
            cell-index = <1>;
            reg = <3d40 40>;
            interrupts = <2 10 0>;
            interrupt-parent = <&mpc5200_pic>; 
            fsl5200-clocking;
        };

I turned on DEBUG in drivers/base/dd.c and a call to pr_debug in the probe routine
and here are the relevant log messages:

[   27.258245] platform: Matched Device fsl-i2c.0 with Driver fsl-i2c
[   27.258269] platform: Probing driver fsl-i2c with device fsl-i2c.0
[   27.258299] I2C: here in fsl_i2c_probe
[   27.258732] bound device 'fsl-i2c.0' to driver 'fsl-i2c' 
[   27.258756] platform: Bound Device fsl-i2c.0 to Driver fsl-i2c
[   27.258776] platform: Matched Device fsl-i2c.1 with Driver fsl-i2c
[   27.258789] platform: Probing driver fsl-i2c with device fsl-i2c.1
[   27.258821] I2C: here in fsl_i2c_probe
[   27.259269] bound device 'fsl-i2c.1' to driver 'fsl-i2c'
[   27.259293] platform: Bound Device fsl-i2c.1 to Driver fsl-i2c

John


On 7/5/07, John Rigby <jcrigby at gmail.com> wrote: 

	kd,
	
	Ok, obviously It doesn't work the way I thought.  Hopefully someone who does
	understand this will comment.
	
	John 
	
	
	
	On 7/4/07, Kári Davíðsson <kari.davidsson at marel.is> wrote: 

		John, thank you for your answare.
		
		Enabling CONFIG_FSL_SOC only enabled the execution of the init function (fsl_i2c_init())
		of the fsl-i2c driver (i2c-mpc.c). The .probe function of the driver was never called
		until I converted the driver to the OF model and added the .match_table to the driver structure.
		
		Then I get the .probe function (fsl_i2c_probe()) called and the i2c bus set up.
		
		Similar thing happens for the i2c device PCF8563 i.e., the init functin of the driver (pcf8563_init())
		is called the driver is registered with the kernel, but the .probe (pcf8563_probe()) is never called.
		
		The driver pcf8563 has _NO_ exported structures or functions so I basically have no handle on it 
		that I can utilize in board specific setup.
		
		The way I suspect this is supposed to work is that from the board settup files I would do
		rtc_dev = platform_device_register_simple("pcf8563", -1, NULL, 0); 
		which should later trigger the calling of the pcf8563_probe() function.
		
		This is doing things in the same way as the fsl i2c code, i.e.
		i2c_dev = platform_device_register_simple("i2c", i, r, 2);
		which by the way does not work untill I have converted the fsl_i2c (i2c-mpc.c) driver to the OF structure.
		
		So still the method of gluing together the OF drivers and non OF drivers eludes me.
		
		rg
		kd
		
		P.S. I did check the 2.6.21-RC7-git3 and found that the i2c-mpc.c and the rtc-pcf85763.c are basically the same
		as what I am working with in 2.6.20+
		________________________________
		
		From: John Rigby [mailto: jcrigby at gmail.com]
		Sent: 3. júlí 2007 16:31
		To: Kári Davíðsson
		Cc: linuxppc-embedded at ozlabs.org 
		Subject: Re: OF devices and non OF devices
		
		
		One place to find binding between OF devices and non OF devices is in arch/powerpc/sysdev/fsl_soc.c 
		The typical pattern is:
		    if of_find_compatible_node "of-device-name"
		        platform_device_register_simple ""platform-device-name"
		        platform_device_add_data ...
		
		
		
		On 7/3/07, Kári Davíðsson <kari.davidsson at marel.is> wrote:
		
		        Hi,
		
		        I am attempting to get some non OF devices working for an mpc 5200 board, in particular 
		        PCF8563 RTC.
		
		        This device has an non OF device interface which I believe is correct. After all it should work
		        on non OF platforms.
		
		        I have managed to get the board to run the i2c initialization (and probe) for the fsl-mpc i2c driver by 
		        converting the fsl-mpc i2c driver to OF driver (I found some patch here that I based this work on).
		
		
		fsl-i2c is one of the devices handled by fsl_soc.c so you shouldn't need to change anything to 
		make it work in the latest kernel.  CONFIG_FSL_SOC was only added to lite5200_defconfig recently so
		that may explain why it's not on in your kernel.
		
		
		
		        Since the PCF8563 driver is not OF driver only its initaliziation code is run but the .probe function 
		        of the driver is never run. Basically (as far as I can understand) the .probe is never run because the
		        driver is not an OF driver.
		
		        I could convert the PCF8563 driver to OF driver and make it work for our puposes but I feel this is 
		        1) Wrong
		        2) therefore wasted work.
		
		
		Since the driver must run on non OF platforms then it should not be converted.  You just need to add a platform_device_register somewhere.
		I don't think fsl_soc.c is  the right place since it is not part of an freescale SOC. 
		You could probably put it in a board specific startup routine.
		
		
		
		        What seems to elude me is some glue that glues together the OF part of the driver space to the non OF part
		        of the driver space. 
		
		        Any hints or pointers on where to find this glue?
		
		        Regards,
		        kd
		
		        P.S. Kernel is post 2.6.20.
		
		        --
		        Kári Davíðsson                   | kari.davidsson at marel.is
		        Hugbúnaðargerð                   | www.marel.com
		        Tel: 563-8156 Fax: +354 563 8001 
		        Iceland
		        _______________________________________________ 
		        Linuxppc-embedded mailing list
		        Linuxppc-embedded at ozlabs.org
		         https://ozlabs.org/mailman/listinfo/linuxppc-embedded <https://ozlabs.org/mailman/listinfo/linuxppc-embedded> 
		
		
		
		_______________________________________________
		Linuxppc-embedded mailing list
		Linuxppc-embedded at ozlabs.org
		https://ozlabs.org/mailman/listinfo/linuxppc-embedded
		


	



More information about the Linuxppc-embedded mailing list