setup.c 3.1 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * linux/arch/sh/kernel/setup_hs7751rvoip.c
 *
 * Copyright (C) 2000  Kazumoto Kojima
 *
 * Renesas Technology Sales HS7751RVoIP Support.
 *
 * Modified for HS7751RVoIP by
 * Atom Create Engineering Co., Ltd. 2002.
 * Lineo uSolutions, Inc. 2003.
 */

#include <linux/init.h>
#include <linux/irq.h>
15 16
#include <linux/mm.h>
#include <linux/vmalloc.h>
L
Linus Torvalds 已提交
17 18
#include <linux/hdreg.h>
#include <linux/ide.h>
19
#include <linux/pm.h>
P
Paul Mundt 已提交
20
#include <asm/io.h>
21
#include <asm/hs7751rvoip/hs7751rvoip.h>
P
Paul Mundt 已提交
22 23 24
#include <asm/machvec.h>
#include <asm/rtc.h>
#include <asm/irq.h>
L
Linus Torvalds 已提交
25 26 27

unsigned int debug_counter;

P
Paul Mundt 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
static void __init hs7751rvoip_init_irq(void)
{
#if defined(CONFIG_HS7751RVOIP_CODEC)
	make_ipr_irq(DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY);
	make_ipr_irq(DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY);
#endif

	init_hs7751rvoip_IRQ();
}

struct sh_machine_vector mv_hs7751rvoip __initmv = {
	.mv_nr_irqs		= 72,

	.mv_inb			= hs7751rvoip_inb,
	.mv_inw			= hs7751rvoip_inw,
	.mv_inl			= hs7751rvoip_inl,
	.mv_outb		= hs7751rvoip_outb,
	.mv_outw		= hs7751rvoip_outw,
	.mv_outl		= hs7751rvoip_outl,

	.mv_inb_p		= hs7751rvoip_inb_p,
	.mv_inw_p		= hs7751rvoip_inw,
	.mv_inl_p		= hs7751rvoip_inl,
	.mv_outb_p		= hs7751rvoip_outb_p,
	.mv_outw_p		= hs7751rvoip_outw,
	.mv_outl_p		= hs7751rvoip_outl,

	.mv_insb		= hs7751rvoip_insb,
	.mv_insw		= hs7751rvoip_insw,
	.mv_insl		= hs7751rvoip_insl,
	.mv_outsb		= hs7751rvoip_outsb,
	.mv_outsw		= hs7751rvoip_outsw,
	.mv_outsl		= hs7751rvoip_outsl,

	.mv_init_irq		= hs7751rvoip_init_irq,
63
	.mv_ioport_map		= hs7751rvoip_ioport_map,
P
Paul Mundt 已提交
64 65 66
};
ALIAS_MV(hs7751rvoip)

L
Linus Torvalds 已提交
67 68 69 70 71
const char *get_system_type(void)
{
	return "HS7751RVoIP";
}

72 73 74 75 76
static void hs7751rvoip_power_off(void)
{
	ctrl_outw(ctrl_inw(PA_OUTPORTR) & 0xffdf, PA_OUTPORTR);
}

L
Linus Torvalds 已提交
77 78 79 80 81 82 83
/*
 * Initialize the board
 */
void __init platform_setup(void)
{
	printk(KERN_INFO "Renesas Technology Sales HS7751RVoIP-2 support.\n");
	ctrl_outb(0xf0, PA_OUTPORTR);
84
	pm_power_off = hs7751rvoip_power_off;
L
Linus Torvalds 已提交
85 86 87 88 89 90 91 92
	debug_counter = 0;
}

void *area5_io8_base;
void *area6_io8_base;
void *area5_io16_base;
void *area6_io16_base;

P
Paul Mundt 已提交
93
static int __init hs7751rvoip_cf_init(void)
L
Linus Torvalds 已提交
94 95
{
	pgprot_t prot;
P
Paul Mundt 已提交
96
	unsigned long paddrbase;
L
Linus Torvalds 已提交
97 98 99 100

	/* open I/O area window */
	paddrbase = virt_to_phys((void *)(PA_AREA5_IO+0x00000800));
	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_COM16);
P
Paul Mundt 已提交
101
	area5_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot);
L
Linus Torvalds 已提交
102 103 104 105 106 107 108 109 110 111 112 113 114
	if (!area5_io16_base) {
		printk("allocate_cf_area : can't open CF I/O window!\n");
		return -ENOMEM;
	}

	/* XXX : do we need attribute and common-memory area also? */

	paddrbase = virt_to_phys((void *)PA_AREA6_IO);
#if defined(CONFIG_HS7751RVOIP_CODEC)
	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_COM8);
#else
	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO8);
#endif
P
Paul Mundt 已提交
115
	area6_io8_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot);
L
Linus Torvalds 已提交
116 117 118 119 120
	if (!area6_io8_base) {
		printk("allocate_cf_area : can't open CODEC I/O 8bit window!\n");
		return -ENOMEM;
	}
	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16);
P
Paul Mundt 已提交
121
	area6_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot);
L
Linus Torvalds 已提交
122 123 124 125 126 127 128 129
	if (!area6_io16_base) {
		printk("allocate_cf_area : can't open CODEC I/O 16bit window!\n");
		return -ENOMEM;
	}

	return 0;
}

P
Paul Mundt 已提交
130
__initcall(hs7751rvoip_cf_init);