Skip to content

Commit

Permalink
cpm_uart: make it possible to utilize from powerpc
Browse files Browse the repository at this point in the history
Driver core has been updated to make use of the new powerpc OF-inspired
platform devices, yet keeping compatibility to the vast board list from
ppc.

Signed-off-by: Vitaly Bordug <vbordug@ru.mvista.com>
  • Loading branch information
Vitaly Bordug committed Sep 21, 2006
1 parent fba4366 commit 3dd0dcb
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 13 deletions.
11 changes: 4 additions & 7 deletions drivers/serial/cpm_uart/cpm_uart_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/delay.h>
#include <asm/fs_pd.h>

#if defined(CONFIG_SERIAL_CPM_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
Expand Down Expand Up @@ -1044,11 +1045,11 @@ int cpm_uart_drv_get_platform_data(struct platform_device *pdev, int is_con)

if (!(r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs")))
return -EINVAL;
mem = r->start;
mem = (u32)ioremap(r->start, r->end - r->start + 1);

if (!(r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pram")))
return -EINVAL;
pram = r->start;
pram = (u32)ioremap(r->start, r->end - r->start + 1);

if(idx > fsid_smc2_uart) {
pinfo->sccp = (scc_t *)mem;
Expand Down Expand Up @@ -1189,11 +1190,7 @@ static int __init cpm_uart_console_setup(struct console *co, char *options)
if (options) {
uart_parse_options(options, &baud, &parity, &bits, &flow);
} else {
bd_t *bd = (bd_t *) __res;

if (bd->bi_baudrate)
baud = bd->bi_baudrate;
else
if ((baud = uart_baudrate()) == -1)
baud = 9600;
}

Expand Down
13 changes: 7 additions & 6 deletions drivers/serial/cpm_uart/cpm_uart_cpm2.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@

#include <asm/io.h>
#include <asm/irq.h>
#include <asm/fs_pd.h>

#include <linux/serial_core.h>
#include <linux/kernel.h>
Expand Down Expand Up @@ -266,7 +267,7 @@ int cpm_uart_init_portdesc(void)
(unsigned long)&cpm2_immr->im_smc[0];
cpm_uart_ports[UART_SMC1].smcp->smc_smcm |= (SMCM_RX | SMCM_TX);
cpm_uart_ports[UART_SMC1].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
cpm_uart_ports[UART_SMC1].port.uartclk = (((bd_t *) __res)->bi_intfreq);
cpm_uart_ports[UART_SMC1].port.uartclk = uart_clock();
cpm_uart_port_map[cpm_uart_nr++] = UART_SMC1;
#endif

Expand All @@ -279,7 +280,7 @@ int cpm_uart_init_portdesc(void)
(unsigned long)&cpm2_immr->im_smc[1];
cpm_uart_ports[UART_SMC2].smcp->smc_smcm |= (SMCM_RX | SMCM_TX);
cpm_uart_ports[UART_SMC2].smcp->smc_smcmr &= ~(SMCMR_REN | SMCMR_TEN);
cpm_uart_ports[UART_SMC2].port.uartclk = (((bd_t *) __res)->bi_intfreq);
cpm_uart_ports[UART_SMC2].port.uartclk = uart_clock();
cpm_uart_port_map[cpm_uart_nr++] = UART_SMC2;
#endif

Expand All @@ -293,7 +294,7 @@ int cpm_uart_init_portdesc(void)
~(UART_SCCM_TX | UART_SCCM_RX);
cpm_uart_ports[UART_SCC1].sccp->scc_gsmrl &=
~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);
cpm_uart_ports[UART_SCC1].port.uartclk = (((bd_t *) __res)->bi_intfreq);
cpm_uart_ports[UART_SCC1].port.uartclk = uart_clock();
cpm_uart_port_map[cpm_uart_nr++] = UART_SCC1;
#endif

Expand All @@ -307,7 +308,7 @@ int cpm_uart_init_portdesc(void)
~(UART_SCCM_TX | UART_SCCM_RX);
cpm_uart_ports[UART_SCC2].sccp->scc_gsmrl &=
~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);
cpm_uart_ports[UART_SCC2].port.uartclk = (((bd_t *) __res)->bi_intfreq);
cpm_uart_ports[UART_SCC2].port.uartclk = uart_clock();
cpm_uart_port_map[cpm_uart_nr++] = UART_SCC2;
#endif

Expand All @@ -321,7 +322,7 @@ int cpm_uart_init_portdesc(void)
~(UART_SCCM_TX | UART_SCCM_RX);
cpm_uart_ports[UART_SCC3].sccp->scc_gsmrl &=
~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);
cpm_uart_ports[UART_SCC3].port.uartclk = (((bd_t *) __res)->bi_intfreq);
cpm_uart_ports[UART_SCC3].port.uartclk = uart_clock();
cpm_uart_port_map[cpm_uart_nr++] = UART_SCC3;
#endif

Expand All @@ -335,7 +336,7 @@ int cpm_uart_init_portdesc(void)
~(UART_SCCM_TX | UART_SCCM_RX);
cpm_uart_ports[UART_SCC4].sccp->scc_gsmrl &=
~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);
cpm_uart_ports[UART_SCC4].port.uartclk = (((bd_t *) __res)->bi_intfreq);
cpm_uart_ports[UART_SCC4].port.uartclk = uart_clock();
cpm_uart_port_map[cpm_uart_nr++] = UART_SCC4;
#endif

Expand Down
27 changes: 27 additions & 0 deletions include/asm-powerpc/fs_pd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Platform information definitions.
*
* 2006 (c) MontaVista Software, Inc.
* Vitaly Bordug <vbordug@ru.mvista.com>
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any
* kind, whether express or implied.
*/

#ifndef FS_PD_H
#define FS_PD_H
#include <sysdev/fsl_soc.h>
#include <asm/time.h>

static inline int uart_baudrate(void)
{
return get_baudrate();
}

static inline int uart_clock(void)
{
return ppc_proc_freq;
}

#endif
32 changes: 32 additions & 0 deletions include/asm-ppc/fs_pd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Platform information definitions.
*
* 2006 (c) MontaVista Software, Inc.
* Vitaly Bordug <vbordug@ru.mvista.com>
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any
* kind, whether express or implied.
*/

#ifndef FS_PD_H
#define FS_PD_H

static inline int uart_baudrate(void)
{
int baud;
bd_t *bd = (bd_t *) __res;

if (bd->bi_baudrate)
baud = bd->bi_baudrate;
else
baud = -1;
return baud;
}

static inline int uart_clock(void)
{
return (((bd_t *) __res)->bi_intfreq);
}

#endif

0 comments on commit 3dd0dcb

Please sign in to comment.