8xx PCMCIA: support for MPC885ADS and MPC866ADS
PATCH 1/1 8xx PCMCIA: support for MPC885ADS and MPC866ADS
This adds adds PCMCIA supported for both MPC885ADS and MPC866ADS.
This is established not together with FADS, because 885 does not have io_block_mapping() for BCSR area. Also, some cleanups done both for 885ADS and MBX.
Signature · 1 line
Sincerely, Vitaly
drivers/pcmcia/m8xx_pcmcia.c +91 -6
@@ -9,6 +9,9 @@* <[email protected]> * Further fixes, v2.6 kernel port * <[email protected]> +* +* Some fixes, additions (C) 2005 Montavista Software, Inc. +* <[email protected]> * * "The ExCA standard specifies that socket controllers should provide * two IO and five memory windows per socket, which can be independently
@@ -97,6 +100,11 @@ MODULE_LICENSE("Dual MPL/GPL");#endif #endif +#if defined(CONFIG_MPC885ADS ) +#define CONFIG_PCMCIA_SLOT_A +#define PCMCIA_GLITCHY_CD +#endif +/* Cyclades ACS uses both slots */ #ifdef CONFIG_PRxK#define CONFIG_PCMCIA_SLOT_A
@@ -374,11 +382,80 @@ static int voltage_set(int slot, int vcc }/* first, turn off all power */ -out_be32 (&((u32 *)BCSR1 ),in_be32 (&((u32 *)BCSR1 )) & ~(BCSR1_PCCVCC_MASK |BCSR1_PCCVPP_MASK )); +out_be32 ((u32 *)BCSR1 ,in_be32 ((u32 *)BCSR1 ) & ~(BCSR1_PCCVCC_MASK |BCSR1_PCCVPP_MASK )); + +/* enable new powersettings */ +out_be32 ((u32 *)BCSR1 ,in_be32 ((u32 *)BCSR1 ) | reg); + +return 0 ; +} + +#define socket_get (_slot_) PCMCIA_SOCKET_KEY_5V + +static void hardware_enable (int slot) +{ +out_be32 ((u32 *)BCSR1 ,in_be32 ((u32 *)BCSR1 ) & ~BCSR1_PCCEN ); +} + +static void hardware_disable (int slot) +{ +out_be32 ((u32 *)BCSR1 ,in_be32 ((u32 *)BCSR1 ) |BCSR1_PCCEN ); +} + +#endif + +/* MPC885ADS Boards */ + +#if defined(CONFIG_MPC885ADS ) + +#define PCMCIA_BOARD_MSG "MPC885ADS" + +static int voltage_set (int slot,int vcc,int vpp) +{ +u32 reg =0 ; +unsigned *bcsr_io; + + bcsr_io =ioremap (BCSR1 ,sizeof (unsigned long )); + +switch (vcc) { +case 0 : +break ; +case 33 : + reg |=BCSR1_PCCVCC0 ; +break ; +case 50 : + reg |=BCSR1_PCCVCC1 ; +break ; +default : +return 1 ; + } + +switch (vpp) { +case 0 : +break ; +case 33 : +case 50 : +if (vcc == vpp) + reg |=BCSR1_PCCVPP1 ; +else +return 1 ; +break ; +case 120 : +if ((vcc ==33 ) || (vcc ==50 )) + reg |=BCSR1_PCCVPP0 ; +else +return 1 ; +default : +return 1 ; + } + +/* first, turn off all power */ +out_be32 (bcsr_io,in_be32 (bcsr_io) & ~(BCSR1_PCCVCC_MASK |BCSR1_PCCVPP_MASK ));/* enable new powersettings */ -out_be32 (&((u32 *)BCSR1 ),in_be32 (&((u32 *)BCSR1 )) | reg); +out_be32 (bcsr_io,in_be32 (bcsr_io) | reg); +iounmap (bcsr_io);return 0 ; }
@@ -386,12 +463,20 @@ static int voltage_set(int slot, int vccstatic void hardware_enable (int slot) { -out_be32 (&((u32 *)BCSR1 ),in_be32 (&((u32 *)BCSR1 )) & ~BCSR1_PCCEN ); +unsigned *bcsr_io; + + bcsr_io =ioremap (BCSR1 ,sizeof (unsigned long )); +out_be32 (bcsr_io,in_be32 (bcsr_io) & ~BCSR1_PCCEN ); +iounmap (bcsr_io); }static void hardware_disable (int slot) { -out_be32 (&((u32 *)BCSR1 ),in_be32 (&((u32 *)BCSR1 )) |BCSR1_PCCEN ); +unsigned *bcsr_io; + + bcsr_io =ioremap (BCSR1 ,sizeof (unsigned long )); +out_be32 (bcsr_io,in_be32 (bcsr_io) |BCSR1_PCCEN ); +iounmap (bcsr_io); }#endif
@@ -440,10 +525,10 @@ static int voltage_set(int slot, int vcc }/* first, turn off all power */ -out_8 (&((u8 *)MBX_CSR2_ADDR ),in_8 (&((u8 *)MBX_CSR2_ADDR )) & ~(CSR2_VCC_MASK |CSR2_VPP_MASK )); +out_8 ((u8 *)MBX_CSR2_ADDR ,in_8 ((u8 *)MBX_CSR2_ADDR ) & ~(CSR2_VCC_MASK |CSR2_VPP_MASK ));/* enable new powersettings */ -out_8 (&((u8 *)MBX_CSR2_ADDR ),in_8 (&((u8 *)MBX_CSR2_ADDR )) | reg); +out_8 ((u8 *)MBX_CSR2_ADDR ,in_8 ((u8 *)MBX_CSR2_ADDR ) | reg);return 0 ; }
Hi Vitaly,
Quoted 7 lines · Vitaly Bordug
This adds adds PCMCIA supported for both MPC885ADS and MPC866ADS.
This is established not together with FADS, because 885 does not have
io_block_mapping()for BCSR area.
Also, some cleanups done both for 885ADS and MBX.Signed-off-by Vitaly Bordug <[email protected]>
<snip>
Review
Quoted 1 line
(quoted diff) +1
-0+ bcsr_io = ioremap(BCSR1, sizeof(unsigned long));
Shouldnt you handle ioremap() failure? Most 85xx code written by Kumar also does not.
Quoted 9 lines · Marcelo Tosatti
Hi Vitaly,
Quoted 6 lines · Vitaly Bordug
This adds adds PCMCIA supported for both MPC885ADS and MPC866ADS.
This is established not together with FADS, because 885 does not have
io_block_mapping()for BCSR area.
Also, some cleanups done both for 885ADS and MBX.
Quoted 8 lines
Quoted 1 line
Signed-off-by Vitaly Bordug <[email protected]><snip>
Review
Quoted 1 line
(quoted diff) +1
-0+ bcsr_io = ioremap(BCSR1, sizeof(unsigned long));Shouldnt you handle
ioremap()failure? Most 85xx code written by Kumar also does not.
Ok, I'll take a hint to go audit my code for ioremap() returns :)
- kumar
Quoted 2 lines · Marcelo Tosatti
Shouldnt you handle
ioremap()failure? Most 85xx code written by Kumar also does not.
And do what if it fails? Chances are you don't have any way to report an error message or panic at this point. In fact, there are a few silly tests like this where the failure tries to panic or print some message that will never be seen. Fortunately, the code will never fail and we will never take such code paths.
-- Dan
Quoted 6 lines · Dan Malek
Quoted 2 lines · Marcelo Tosatti
Shouldnt you handle
ioremap()failure? Most 85xx code written by Kumar also does not.
Quoted 6 lines
And do what if it fails? Chances are you don't have any way to report an error message or panic at this point. In fact, there are a few silly tests like this where the failure tries to panic or print some message that will never be seen. Fortunately, the code will never fail and we will never take such code paths.
OK! Was talking BS then.