video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
[PATCH] video: Add new driver for Silicon Motion SM501/SM502
This patch adds a new driver for SM501/SM502. Compared to the existing driver it allows dynamic selection of resolution (environment: videomode).
The drive is based on Vincent Sanders and Ben Dooks' linux kernel driver.
Use CONFIG_VIDEO_SM501NEW to enable the driver.
This has been tested on Janz emPC-A400. On this platform the SM501 is connected via PCI.
The patch is against "latest" u-boot git-repository
Please (still) be patient if style of submission or patches are offending.
----
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +125 -0
@@ -0,0 +1,125 @@ +/* Large parts of this have been taken from the linux kernel source code +* with the following licencse: +* +* Copyright (c) 2006 Simtec Electronics +* Vincent Sanders <[email protected]> +* Ben Dooks <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Framebuffer driver for the Silicon Motion SM501 +*/ + +/* Ported to u-boot: +* +* Copyright (c) 2008 StefanAlthoefer (as at janz.de) +*/ + +/* +* Platform data definitions +*/ + +#define SM501FB_FLAG_USE_INIT_MODE (1<<0) +#define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1) +#define SM501FB_FLAG_USE_HWCURSOR (1<<2) +#define SM501FB_FLAG_USE_HWACCEL (1<<3) + +struct sm501_platdata_fbsub { +struct fb_videomode *def_mode; +unsigned int def_bpp; +unsigned long max_mem; +unsigned int flags; +}; + +enum sm501_fb_routing { +SM501_FB_OWN =0 ,/* CRT=>CRT, Panel=>Panel */ +SM501_FB_CRT_PANEL =1 ,/* Panel=>CRT, Panel=>Panel */ +}; + +/* sm501_platdata_fb flag field bit definitions */ + +#define SM501_FBPD_SWAP_FB_ENDIAN (1<<0)/* need to endian swap */ + +/* sm501_platdata_fb +* +* configuration data for the framebuffer driver +*/ + +struct sm501_platdata_fb { +enum sm501_fb_routing fb_route; +unsigned int flags; +struct sm501_platdata_fbsub *fb_crt; +struct sm501_platdata_fbsub *fb_pnl; +}; + +/* gpio i2c */ + +struct sm501_platdata_gpio_i2c { +unsigned int pin_sda; +unsigned int pin_scl; +}; + +/* sm501_initdata +* +* use for initialising values that may not have been setup +* before the driver is loaded. +*/ + +struct sm501_reg_init { +unsigned long set; +unsigned long mask; +}; + +#define SM501_USE_USB_HOST (1<<0) +#define SM501_USE_USB_SLAVE (1<<1) +#define SM501_USE_SSP0 (1<<2) +#define SM501_USE_SSP1 (1<<3) +#define SM501_USE_UART0 (1<<4) +#define SM501_USE_UART1 (1<<5) +#define SM501_USE_FBACCEL (1<<6) +#define SM501_USE_AC97 (1<<7) +#define SM501_USE_I2S (1<<8) + +#define SM501_USE_ALL (0xffffffff) + +struct sm501_initdata { +struct sm501_reg_init gpio_low; +struct sm501_reg_init gpio_high; +struct sm501_reg_init misc_timing; +struct sm501_reg_init misc_control; + +unsigned long devices; +unsigned long mclk;/* non-zero to modify */ +unsigned long m1xclk;/* non-zero to modify */ +}; + +/* sm501_init_gpio +* +* default gpio settings +*/ + +struct sm501_init_gpio { +struct sm501_reg_init gpio_data_low; +struct sm501_reg_init gpio_data_high; +struct sm501_reg_init gpio_ddr_low; +struct sm501_reg_init gpio_ddr_high; +}; + +/* sm501_platdata +* +* This is passed with the platform device to allow the board +* to control the behaviour of the SM501 driver(s) which attach +* to the device. +* +*/ + +struct sm501_platdata { +struct sm501_initdata *init; +struct sm501_init_gpio *init_gpiop; +struct sm501_platdata_fb *fb; + +struct sm501_platdata_gpio_i2c *gpio_i2c; +unsigned int gpio_i2c_nr; +};
drivers/video/sm501new-regs.h renamed from /drivers/video/sm501new-regs.h +365 -0
365 lines not on this page · raw message
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Hello Stefan,
please see comments below:
Quoted 1 line · Stefan Althoefer
[PATCH] video: Add new driver for Silicon Motion SM501/SM502
this line duplicates the subject, so simply remove it.
Quoted 6 lines
This patch adds a new driver for SM501/SM502. Compared to the existing driver it allows dynamic selection of resolution (environment: videomode).
The drive is based on Vincent Sanders and Ben Dooks' linux kernel driver.
s/drive/driver/
Quoted 1 line
Use
CONFIG_VIDEO_SM501NEWto enable the driver.
not sure if CONFIG_VIDEO_SM501NEW is a good chose here. Maybe we should use s.th. like CONFIG_VIDEO_SM50x. This applies to the file names too: sm50x.h, sm50x.c, etc. Even better would be a merge with the existing driver.
<snip>
Quoted 4 lines
The patch is against "latest" u-boot git-repository
Please (still) be patient if style of submission or patches are offending.
These lines are patch comments which should not appear in the commit message. The common practice is to place such comments below "---" line.
Quoted 2 lines
Signed-off-by Stefan Althoefer <[email protected]>----
So, here is the place for patch comments which should not appear in the commit message. Also changes between patch revisions are often summarised here.
drivers/video/sm501new.h line 2
Quoted 6 lines
diff -uprN
u-boot-orig//drivers/video/sm501new.hu-boot/drivers/video/sm501new.hdrivers/video/sm501new.h renamed from /drivers/video/sm501new.h +2
-0@@ -0,0 +1,125 @@ +/* Large parts of this have been taken from the linux kernel source code +* with the following licencse:
Multi-line comment style is as follows:
/*
* This is a
* multi-line
* comment
*/
drivers/video/sm501new.h line 18
Quoted 4 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +4
-0+/* Ported to u-boot: +* +* Copyright (c) 2008 StefanAlthoefer (as at janz.de) +*/
same here, fix multi-line comment here and everywhere in the code.
<snip>
Quoted 29 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +29
-0+#define SM501FB_FLAG_USE_INIT_MODE (1<<0) +#define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1) +#define SM501FB_FLAG_USE_HWCURSOR (1<<2) +#define SM501FB_FLAG_USE_HWACCEL (1<<3) + +struct sm501_platdata_fbsub { +struct fb_videomode *def_mode; +unsigned int def_bpp; +unsigned long max_mem; +unsigned int flags; +}; + +enum sm501_fb_routing { +SM501_FB_OWN =0 ,/* CRT=>CRT, Panel=>Panel */ +SM501_FB_CRT_PANEL =1 ,/* Panel=>CRT, Panel=>Panel */ +}; + +/* sm501_platdata_fb flag field bit definitions */ + +#define SM501_FBPD_SWAP_FB_ENDIAN (1<<0)/* need to endian swap */ + +/* sm501_platdata_fb +* +* configuration data for the framebuffer driver +*/ + +struct sm501_platdata_fb { +enum sm501_fb_routing fb_route; +unsigned int flags;
drivers/video/sm501new.h line 62
Quoted 10 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +10
-0+struct sm501_platdata_fbsub *fb_crt; +struct sm501_platdata_fbsub *fb_pnl; +}; + +/* gpio i2c */ + +struct sm501_platdata_gpio_i2c { +unsigned int pin_sda; +unsigned int pin_scl; +};
all this stuff above starting from
"#define SM501FB_FLAG_USE_INIT_MODE"
can be removed if you remove "init_gpiop", "fb", "gpio_i2c" and "gpio_i2c_nr" from the "struct sm501_platdata" definition below. Also remove ".fb = &sm501_fb_pdata" from "sm501_pci_platdata" declaration in drivers/video/sm501new.c. These structure members aren't referenced in this U-Boot driver, so they aren't needed (unused and nearly dead code and data).
<snip>
drivers/video/sm501new.h line 83
Quoted 9 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +9
-0+#define SM501_USE_USB_HOST (1<<0) +#define SM501_USE_USB_SLAVE (1<<1) +#define SM501_USE_SSP0 (1<<2) +#define SM501_USE_SSP1 (1<<3) +#define SM501_USE_UART0 (1<<4) +#define SM501_USE_UART1 (1<<5) +#define SM501_USE_FBACCEL (1<<6) +#define SM501_USE_AC97 (1<<7) +#define SM501_USE_I2S (1<<8)
These macros aren't used, remove them too.
drivers/video/sm501new.h line 93
Quoted 10 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +10
-0+ +#define SM501_USE_ALL (0xffffffff) + +struct sm501_initdata { +struct sm501_reg_init gpio_low; +struct sm501_reg_init gpio_high; +struct sm501_reg_init misc_timing; +struct sm501_reg_init misc_control; + +unsigned long devices;
"devices" member is only initialized in "sm501_pci_initdata" declaration and isn't referenced anywhere in the code, so another candidate to remove.
Quoted 5 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +5
-0+/* sm501_platdata +* +* This is passed with the platform device to allow the board +* to control the behaviour of the SM501 driver(s) which attach +* to the device.
drivers/video/sm501new.h line 124
Quoted 10 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +10
-0+* +*/ + +struct sm501_platdata { +struct sm501_initdata *init; +struct sm501_init_gpio *init_gpiop; +struct sm501_platdata_fb *fb; + +struct sm501_platdata_gpio_i2c *gpio_i2c; +unsigned int gpio_i2c_nr;
see above suggestion to remove init_gpiop, fb, gpio_i2c and gpio_i2c_nr.
Quoted 4 lines
diff -uprN
u-boot-orig//drivers/video/sm501new-regs.hu-boot/drivers/video/sm501new-regs.h
drivers/video/sm501new-regs.h line 10
Quoted 10 lines
drivers/video/sm501new-regs.h renamed from /drivers/video/sm501new-regs.h +10
-0@@ -0,0 +1,365 @@ +/* sm501-regs.h +* +* Copyright 2006 Simtec Electronics +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Silicon Motion SM501 register definitions +*/
please, fix multi-line comment style.
Also check all below defined macros in this file. If some macro isn't used in the driver code, then remove it.
drivers/video/sm501new-regs.h line 24
Quoted 13 lines
drivers/video/sm501new-regs.h renamed from /drivers/video/sm501new-regs.h +13
-0+/* System Configuration area */ +/* System config base */ +#define SM501_SYS_CONFIG (0x000000) + +/* config 1 */ +#define SM501_SYSTEM_CONTROL (0x000000) +#define SM501_MISC_CONTROL (0x000004) + +#define SM501_MISC_BUS_SH (0x0) +#define SM501_MISC_BUS_PCI (0x1) +#define SM501_MISC_BUS_XSCALE (0x2) +#define SM501_MISC_BUS_NEC (0x6) +#define SM501_MISC_BUS_MASK (0x7)
<snip>
Best regards,
Anatolij
Signature · 3 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Hi Anatolij,
<snip>
Quoted 6 lines
Quoted 1 line
Use
CONFIG_VIDEO_SM501NEWto enable the driver.not sure if
CONFIG_VIDEO_SM501NEWis a good chose here. Maybe we should use s.th. likeCONFIG_VIDEO_SM50x. This applies to the file names too:sm50x.h,sm50x.c, etc. Even better would be a merge with the existing driver.
The CONFIG_VIDEO_SM501 driver is completely differently configured (boards supply tables with register settings). This will be very hard to merge. SM50x might be a better name, but is it good style to mix lowercase and uppercase letters in macro name?
<snip>
Quoted 117 lines
Quoted 29 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +29
-0+#define SM501FB_FLAG_USE_INIT_MODE (1<<0) +#define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1) +#define SM501FB_FLAG_USE_HWCURSOR (1<<2) +#define SM501FB_FLAG_USE_HWACCEL (1<<3) + +struct sm501_platdata_fbsub { +struct fb_videomode *def_mode; +unsigned int def_bpp; +unsigned long max_mem; +unsigned int flags; +}; + +enum sm501_fb_routing { +SM501_FB_OWN =0 ,/* CRT=>CRT, Panel=>Panel */ +SM501_FB_CRT_PANEL =1 ,/* Panel=>CRT, Panel=>Panel */ +}; + +/* sm501_platdata_fb flag field bit definitions */ + +#define SM501_FBPD_SWAP_FB_ENDIAN (1<<0)/* need to endian swap */ + +/* sm501_platdata_fb +* +* configuration data for the framebuffer driver +*/ + +struct sm501_platdata_fb { +enum sm501_fb_routing fb_route; +unsigned int flags;drivers/video/sm501new.h line 62
Quoted 10 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +10
-0+struct sm501_platdata_fbsub *fb_crt; +struct sm501_platdata_fbsub *fb_pnl; +}; + +/* gpio i2c */ + +struct sm501_platdata_gpio_i2c { +unsigned int pin_sda; +unsigned int pin_scl; +};all this stuff above starting from
"#defineSM501FB_FLAG_USE_INIT_MODE"
can be removed if you remove "init_gpiop", "fb", "gpio_i2c" and "gpio_i2c_nr" from the "structsm501_platdata" definition below. Also remove ".fb =&sm501_fb_pdata" from "sm501_pci_platdata" declaration indrivers/video/sm501new.c. These structure members aren't referenced in this U-Boot driver, so they aren't needed (unused and nearly dead code and data).<snip>
drivers/video/sm501new.h line 83
Quoted 9 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +9
-0+#define SM501_USE_USB_HOST (1<<0) +#define SM501_USE_USB_SLAVE (1<<1) +#define SM501_USE_SSP0 (1<<2) +#define SM501_USE_SSP1 (1<<3) +#define SM501_USE_UART0 (1<<4) +#define SM501_USE_UART1 (1<<5) +#define SM501_USE_FBACCEL (1<<6) +#define SM501_USE_AC97 (1<<7) +#define SM501_USE_I2S (1<<8)These macros aren't used, remove them too.
drivers/video/sm501new.h line 93
Quoted 10 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +10
-0+ +#define SM501_USE_ALL (0xffffffff) + +struct sm501_initdata { +struct sm501_reg_init gpio_low; +struct sm501_reg_init gpio_high; +struct sm501_reg_init misc_timing; +struct sm501_reg_init misc_control; + +unsigned long devices;"devices" member is only initialized in "
sm501_pci_initdata" declaration and isn't referenced anywhere in the code, so another candidate to remove.Quoted 5 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +5
-0+/* sm501_platdata +* +* This is passed with the platform device to allow the board +* to control the behaviour of the SM501 driver(s) which attach +* to the device. drivers/video/sm501new.h line 124
Quoted 10 lines
drivers/video/sm501new.h renamed from /drivers/video/sm501new.h +10
-0+* +*/ + +struct sm501_platdata { +struct sm501_initdata *init; +struct sm501_init_gpio *init_gpiop; +struct sm501_platdata_fb *fb; + +struct sm501_platdata_gpio_i2c *gpio_i2c; +unsigned int gpio_i2c_nr;see above suggestion to remove
init_gpiop, fb,gpio_i2candgpio_i2c_nr.Quoted 4 lines
diff -uprN
u-boot-orig//drivers/video/sm501new-regs.hu-boot/drivers/video/sm501new-regs.hdrivers/video/sm501new-regs.h line 10
Quoted 10 lines
drivers/video/sm501new-regs.h renamed from /drivers/video/sm501new-regs.h +10
-0@@ -0,0 +1,365 @@ +/* sm501-regs.h +* +* Copyright 2006 Simtec Electronics +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Silicon Motion SM501 register definitions +*/ please, fix multi-line comment style.
Also check all below defined macros in this file. If some macro isn't used in the driver code, then remove it.
Quoted 14 lines
Quoted 13 lines
drivers/video/sm501new-regs.h renamed from /drivers/video/sm501new-regs.h +13
-0+/* System Configuration area */ +/* System config base */ +#define SM501_SYS_CONFIG (0x000000) + +/* config 1 */ +#define SM501_SYSTEM_CONTROL (0x000000) +#define SM501_MISC_CONTROL (0x000004) + +#define SM501_MISC_BUS_SH (0x0) +#define SM501_MISC_BUS_PCI (0x1) +#define SM501_MISC_BUS_XSCALE (0x2) +#define SM501_MISC_BUS_NEC (0x6) +#define SM501_MISC_BUS_MASK (0x7)<snip>
I agree in removing dead code and structure components that will never make sense in u-boot environment. However, should I really delete definitions form -regs.h? This is well developed (linux) and things might be needed for future development. I did not touch this file compared to kernel source.
- Stefan
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
In reply to Anatolij GustschinDear Anatolij & Stefan,
Quoted 7 lines · In message <[email protected]> you wrote:
Quoted 2 lines
Use
CONFIG_VIDEO_SM501NEWto enable the driver.not sure if
CONFIG_VIDEO_SM501NEWis a good chose here. Maybe we should use s.th. likeCONFIG_VIDEO_SM50x. This applies to the file names too:sm50x.h,sm50x.c, etc. Even better would be a merge with the existing driver.
I agree with Anatolij here. A merge would definitely be best.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Any sufficiently advanced technology is indistinguishable from a rigged demo. - Andy Finkel, computer guy
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Quoted 4 lines · Wolfgang Denk
Dear Anatolij & Stefan,
Quoted 1 line · In message <[email protected]> you wrote:
Quoted 8 lines
Quoted 6 lines
Quoted 1 line
Use
CONFIG_VIDEO_SM501NEWto enable the driver.not sure if
CONFIG_VIDEO_SM501NEWis a good chose here. Maybe we should use s.th. likeCONFIG_VIDEO_SM50x. This applies to the file names too:sm50x.h,sm50x.c, etc. Even better would be a merge with the existing driver.I agree with Anatolij here. A merge would definitely be best.
We are about to build our first prototype for MPC8548E based motherboard and I also have SM502 on it. It is very good that there is somebody else working on it and I want to take part in the process.
As for the SM502, it is a multi-function chip that has more than just video. I'm writing an I2C driver for it right now and I want to ask you guys for your opinion.
MPC8548 has _TWO_ I2C controllers and it is taken care of in fsl_i2c.c by defining a "bus number." There is a function that one uses to set a bus for consecutive operations with i2c_read() and friends (they do NOT take a bus number as a parameter.) That means one sets a bus and then all the operations are done on that bus until it is changed again.
This might be OK but it is definitely not portable and SOC-specific. In my case I have a _THIRD_ I2C bus off of SM502... What do you think would be a best approach to address this:
a.) Rewrite _ALL_ I2C code to make those i2c_read() etc. functions to take
an additional parameter, bus number
b.) Make a global var i2c_bus or something and add a global function kinda
i2c_set_bus() so all i2c_read()/i2c_write() functions use that variable
c.) Add a third bus for SM502 I2C adapter to fsl_i2c.c (horrible hack)
d.) Make SM502 I2C a totally separate entity with its own set of functions
(like sm502_i2c_read() etc.)
Please tell what you think. I personally lean towards option b.) but I might be wrong :)
And there is another useful part of SM502 that's begging for implementation -- USB controller with legacy KBD/Mouse support...
---
******************************************************************
* KSI at home KOI8 Net < > The impossible we do immediately. *
* Las Vegas NV, USA < > Miracles require 24-hour notice. *
******************************************************************
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Dear ksi at koi8.net,
Quoted 4 lines · In message <[email protected]> you wrote:
As for the SM502, it is a multi-function chip that has more than just video. I'm writing an I2C driver for it right now and I want to ask you guys for your opinion.
That's not new - the SM501 is pretty similar.
Quoted 5 lines
MPC8548 has _TWO_ I2C controllers and it is taken care of in
fsl_i2c.cby defining a "bus number." There is a function that one uses to set a bus for consecutive operations withi2c_read()and friends (they do NOT take a bus number as a parameter.) That means one sets a bus and then all the operations are done on that bus until it is changed again.
That's the general idea, also for example for device handling: we set a current device (or bus) with one command, and then continue to use that.
Quoted 1 line
This might be OK but it is definitely not portable and SOC-specific. In my
I think the "this" here refers to the specific implementation, not the general approach, right?
Quoted 9 lines
case I have a _THIRD_ I2C bus off of SM502... What do you think would be a best approach to address this:
a.) Rewrite _ALL_ I2C code to make those
i2c_read()etc. functions to take
an additional parameter, bus numberb.) Make a global var
i2c_busor something and add a global function kinda
i2c_set_bus()so all i2c_read()/i2c_write() functions use that variable
Quoted 7 lines
c.) Add a third bus for SM502 I2C adapter to
fsl_i2c.c(horrible hack)d.) Make SM502 I2C a totally separate entity with its own set of functions
(like sm502_i2c_read() etc.)Please tell what you think. I personally lean towards option b.) but I might be wrong :)
I agree.
Quoted 2 lines
And there is another useful part of SM502 that's begging for implementation -- USB controller with legacy KBD/Mouse support...
Feel free to submit patches :-)
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de You're too beautiful to ignore. Too much woman. -- Kirk to Yeoman Rand, "The Enemy Within", stardate unknown
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Quoted 5 lines · Wolfgang Denk
Dear ksi at koi8.net,
In message <[email protected]> you
Quoted 1 line · wrote:
Quoted 7 lines
Quoted 1 line
As for the SM502, it is a multi-function chip that has more than just
video.
Quoted 1 line
I'm writing an I2C driver for it right now and I want to ask you guys
for
Quoted 1 line
your opinion.
That's not new - the SM501 is pretty similar.
As a matter of fact, SM501 is an older, now nonexistent version of SM502. Its support in U-Boot is rudimentary. I'd rather removed that old sm501.c altogether and replaced it with a new sm502.c. That should work for old SM501 chips if there are still any in existence.
Support is much better in Linux kernel -- it is almost fully supported out of the box, video, USB, sound etc.
Quoted 13 lines
Quoted 1 line
MPC8548 has _TWO_ I2C controllers and it is taken care of in
fsl_i2c.cby
Quoted 1 line
defining a "bus number." There is a function that one uses to set a
bus for
Quoted 1 line
consecutive operations with
i2c_read()and friends (they do NOT take abus
Quoted 2 lines
number as a parameter.) That means one sets a bus and then all the operations are done on that bus until it is changed again.
That's the general idea, also for example for device handling: we set a current device (or bus) with one command, and then continue to use that.
Quoted 5 lines
Quoted 1 line
This might be OK but it is definitely not portable and SOC-specific.
In my
I think the "this" here refers to the specific implementation, not the general approach, right?
Yes.
Quoted 16 lines
Quoted 1 line
case I have a _THIRD_ I2C bus off of SM502... What do you think would
be a
Quoted 3 lines
best approach to address this:
a.) Rewrite _ALL_ I2C code to make those
i2c_read()etc. functions totake
Quoted 3 lines
an additional parameter, bus number
b.) Make a global var
i2c_busor something and add a global functionkinda
Quoted 1 line
i2c_set_bus()so all i2c_read()/i2c_write() functions use thatvariable
Quoted 4 lines
c.) Add a third bus for SM502 I2C adapter to
fsl_i2c.c(horrible hack)d.) Make SM502 I2C a totally separate entity with its own set of
Quoted 8 lines
functions
Quoted 3 lines
(like sm502_i2c_read() etc.)Please tell what you think. I personally lean towards option b.) but I
might
Quoted 1 line
be wrong :)
I agree.
OK, so I'll take that route.
Quoted 5 lines
Quoted 1 line
And there is another useful part of SM502 that's begging for
implementation
Quoted 1 line
-- USB controller with legacy KBD/Mouse support...
Feel free to submit patches :-)
Sure, but there are other things that must me done before that USB. I need Silicon Image Sil3124A SATA driver first :)
---
******************************************************************
* KSI at home KOI8 Net < > The impossible we do immediately. *
* Las Vegas NV, USA < > Miracles require 24-hour notice. *
******************************************************************
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Dear ksi at koi8.net,
Quoted 2 lines · In message <[email protected]> you wrote:
As a matter of fact, SM501 is an older, now nonexistent version of SM502.
Yeah. Tell that to some hardware companies who are shipping boards with the SM501 on it. :-)
Quoted 3 lines
Its support in U-Boot is rudimentary. I'd rather removed that old
sm501.caltogether and replaced it with a newsm502.c. That should work for old SM501 chips if there are still any in existence.
They are, and will be in existence at least for a couple of years (my expectation for couple is a two-digit number).
Quoted 2 lines
Support is much better in Linux kernel -- it is almost fully supported out of the box, video, USB, sound etc.
Linux is an OS - U-Boot is a mere boot loader ;-)
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Defaults are wonderful, just like fire.
- Larry Wall in <[email protected]>PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Quoted 10 lines · Wolfgang Denk
Dear ksi at koi8.net,
In message <[email protected]> you
Quoted 2 lines · wrote:
As a matter of fact, SM501 is an older, now nonexistent version of
SM502.
Yeah. Tell that to some hardware companies who are shipping boards with the SM501 on it. :-)
They must be well stocked up with those :) Yeah, sure there are still such boards and they will still exist in foreseable future. But I personally think it is not a reason for that old basic driver to hang out forever if the new one can also work with old boards with minimal changes.
Quoted 8 lines
Quoted 1 line
Its support in U-Boot is rudimentary. I'd rather removed that old
sm501.cQuoted 1 line
altogether and replaced it with a new
sm502.c. That should work forold
Quoted 1 line
SM501 chips if there are still any in existence.
They are, and will be in existence at least for a couple of years (my expectation for couple is a two-digit number).
They must have loads of them in their inventories... Yes, I agree they will be used until inventories run dry but it is not something that has future.
I would rather suggest having 2 separate drivers--sm501.c and sm502.c--for a transitional period. Then we could rework all boards using old sm501.c to use the new driver, one by one, and when the last one is converted we'll be able to get rid of the old code.
Just thoughts, ya know...
Quoted 5 lines
Quoted 1 line
Support is much better in Linux kernel -- it is almost fully supported
out
Quoted 1 line
of the box, video, USB, sound etc.
Linux is an OS - U-Boot is a mere boot loader ;-)
Eh, for some U-Boot is also an OS...
---
******************************************************************
* KSI at home KOI8 Net < > The impossible we do immediately. *
* Las Vegas NV, USA < > Miracles require 24-hour notice. *
******************************************************************
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
In reply to Wolfgang DenkDear All,
Quoted 10 lines
Dear Anatolij & Stefan,
Quoted 5 lines · In message <[email protected]> you wrote:
Quoted 1 line
Use
CONFIG_VIDEO_SM501NEWto enable the driver.not sure if
CONFIG_VIDEO_SM501NEWis a good chose here. Maybe we should use s.th. likeCONFIG_VIDEO_SM50x. This applies to the file names too:sm50x.h,sm50x.c, etc. Even better would be a merge with the existing driver.I agree with Anatolij here. A merge would definitely be best.
Before I start to implement the good suggestions, I'd like to know how such a merge would look like in your opinion.
Over the long term, I see the old driver vanishing, as it is too complicated to use (you need to be a video and SMI register expert). It is not much more than a jump into the board specific setup routines. However, removing the old driver would break half a dozen of boards (inacceptable).
BTW the driver will probably also work with the new SM107, which as no USB, Keyboard and all this stuff.
-- Stefan
PATCH 1/1 video: Add new driver for Silicon Motion SM501/SM502 Part 1/2
Hello Stefan,
Quoted 6 lines · Stefan Althoefer
Dear All,
Quoted 4 lines
Dear Anatolij & Stefan,
Quoted 1 line · In message <[email protected]> you wrote:
Quoted 1 line
Use
CONFIG_VIDEO_SM501NEWto enable the driver.
Quoted 8 lines
Quoted 5 lines
Quoted 4 lines
not sure if
CONFIG_VIDEO_SM501NEWis a good chose here. Maybe we should use s.th. likeCONFIG_VIDEO_SM50x. This applies to the file names too:sm50x.h,sm50x.c, etc. Even better would be a merge with the existing driver.I agree with Anatolij here. A merge would definitely be best.
Before I start to implement the good suggestions, I'd like to know how such a merge would look like in your opinion.
see inlined patch below how it could be done without removing old sm501 code. Defining CONFIG_VIDEO_SM501_PCI enables using new sm501 driver code.
Quoted 5 lines
Over the long term, I see the old driver vanishing, as it is too complicated to use (you need to be a video and SMI register expert). It is not much more than a jump into the board specific setup routines. However, removing the old driver would break half a dozen of boards (inacceptable).
we do not have to remove old code. Everyone who doesn't additionally define CONFIG_VIDEO_SM501_PCI will be able to use it. The advantage of the old code is that it is small. This is fundamental design principle #1 of U-Boot:
http://www.denx.de/wiki/view/U-Boot/DesignPrinciples#1_Keep_it_Small
I agree that the old sm501 code is suboptimal and could be improved.
drivers/video/sm501.c +37 -28
@@ -33,30 +33,35 @@#include <video_fb.h> #include <sm501.h> - -#define read8 (ptrReg) \ - *(volatile unsigned char *)(sm501.isaBase + ptrReg) - -#define write8 (ptrReg,value) \ - *(volatile unsigned char *)(sm501.isaBase + ptrReg) = value - -#define read16 (ptrReg) \ - (*(volatile unsigned short *)(sm501.isaBase + ptrReg)) - -#define write16 (ptrReg,value) \ - (*(volatile unsigned short *)(sm501.isaBase + ptrReg) = value) - -#define read32 (ptrReg) \ - (*(volatile unsigned int *)(sm501.isaBase + ptrReg)) - -#define write32 (ptrReg, value) \ - (*(volatile unsigned int *)(sm501.isaBase + ptrReg) = value) +#ifdef CONFIG_VIDEO_SM501_PCI +#include <pci.h> +#include "videomodes.h" +#include "sm50x-regs.h" +#include "sm50x.h" +#endif GraphicDevice sm501; -/*----------------------------------------------------------------------------- -* SmiSetRegs -- -*----------------------------------------------------------------------------- +#ifdef CONFIG_VIDEO_SM501_PCI +/* +* code used in sm501_pci_init() +* comes here. +*/ + +static int sm501_pci_init (void ) +{ +GraphicDevice *pGD = (GraphicDevice *)&sm501; +/* +* Code to find the pci devide, setup video mode and +* init sm501 struct comes here. +* return 0 on success, non-zero otherwise. +* This is mainly the code you currently have +* in video_hw_init() in sm501new.c file. +*/ +} +#else +/* +* SmiSetRegs */ static void SmiSetRegs (void ) {
@@ -66,7 +71,7 @@ static void SmiSetRegs (void)*/ const SMI_REGS *preg =board_get_regs ();while (preg->Index) { -write32 (preg->Index, preg->Value); +writel (preg->Value, sm501.isaBase + preg->Index);/* * Insert a delay between */
@@ -74,10 +79,10 @@ static void SmiSetRegs (void) preg ++; } } +#endif -/*----------------------------------------------------------------------------- -* video_hw_init -- -*----------------------------------------------------------------------------- +/* +* video_hw_init */ void *video_hw_init (void ) {
@@ -85,6 +90,7 @@ void *video_hw_init (void)memset (&sm501,0 ,sizeof (GraphicDevice)); +#ifndef CONFIG_VIDEO_SM501_PCI /* * Initialization of the access to the graphic chipset Retreive base * address of the chipset (see board/RPXClassic/eccx.c)
@@ -122,6 +128,10 @@ void *video_hw_init (void)/* (see board/RPXClassic/RPXClassic.c) */ board_validate_screen (sm501.isaBase); +#else +if (!sm501_pci_init ()) +return 0 ; +#endif /* CONFIG_VIDEO_SM501_PCI */ /* Clear video memory */ i = sm501.memSize/4 ;
@@ -132,9 +142,8 @@ void *video_hw_init (void)return (&sm501); } -/*----------------------------------------------------------------------------- -* video_set_lut -- -*----------------------------------------------------------------------------- +/* +* video_set_lut */ void video_set_lut ( unsigned int index, /* color number */
Signature · 8 lines
Better suggestions are always welcome. Best regards, Anatolij DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de