1/* 2 * Renesas Technology Sales HS7751RVoIP Support. 3 * 4 * Copyright (C) 2000 Kazumoto Kojima 5 * 6 * Modified for HS7751RVoIP by 7 * Atom Create Engineering Co., Ltd. 2002. 8 * Lineo uSolutions, Inc. 2003. 9 */ 10#include <linux/init.h> 11#include <linux/irq.h> 12#include <linux/mm.h> 13#include <linux/pm.h> 14#include <asm/hs7751rvoip.h> 15#include <asm/io.h> 16#include <asm/machvec.h> 17 18static struct ipr_data hs77501rvoip_ipr_map[] = { 19#if defined(CONFIG_HS7751RVOIP_CODEC) 20 { DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, 21 { DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY }, 22#endif 23}; 24 25static void __init hs7751rvoip_init_irq(void) 26{ 27 make_ipr_irq(hs77501rvoip_ipr_map, ARRAY_SIZE(hs77501rvoip_ipr_map)); 28 29 init_hs7751rvoip_IRQ(); 30} 31 32static void hs7751rvoip_power_off(void) 33{ 34 ctrl_outw(ctrl_inw(PA_OUTPORTR) & 0xffdf, PA_OUTPORTR); 35} 36 37void *area5_io8_base; 38void *area6_io8_base; 39void *area5_io16_base; 40void *area6_io16_base; 41 42static int __init hs7751rvoip_cf_init(void) 43{ 44 pgprot_t prot; 45 unsigned long paddrbase; 46 47 /* open I/O area window */ 48 paddrbase = virt_to_phys((void *)(PA_AREA5_IO+0x00000800)); 49 prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_COM16); 50 area5_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); 51 if (!area5_io16_base) { 52 printk("allocate_cf_area : can't open CF I/O window!\n"); 53 return -ENOMEM; 54 } 55 56 57 paddrbase = virt_to_phys((void *)PA_AREA6_IO); 58#if defined(CONFIG_HS7751RVOIP_CODEC) 59 prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_COM8); 60#else 61 prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO8); 62#endif 63 area6_io8_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); 64 if (!area6_io8_base) { 65 printk("allocate_cf_area : can't open CODEC I/O 8bit window!\n"); 66 return -ENOMEM; 67 } 68 prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16); 69 area6_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); 70 if (!area6_io16_base) { 71 printk("allocate_cf_area : can't open CODEC I/O 16bit window!\n"); 72 return -ENOMEM; 73 } 74 75 return 0; 76} 77 78/* 79 * Initialize the board 80 */ 81static void __init hs7751rvoip_setup(char **cmdline_p) 82{ 83 device_initcall(hs7751rvoip_cf_init); 84 85 ctrl_outb(0xf0, PA_OUTPORTR); 86 pm_power_off = hs7751rvoip_power_off; 87 88 printk(KERN_INFO "Renesas Technology Sales HS7751RVoIP-2 support.\n"); 89} 90 91struct sh_machine_vector mv_hs7751rvoip __initmv = { 92 .mv_name = "HS7751RVoIP", 93 .mv_setup = hs7751rvoip_setup, 94 .mv_nr_irqs = 72, 95 96 .mv_inb = hs7751rvoip_inb, 97 .mv_inw = hs7751rvoip_inw, 98 .mv_inl = hs7751rvoip_inl, 99 .mv_outb = hs7751rvoip_outb, 100 .mv_outw = hs7751rvoip_outw, 101 .mv_outl = hs7751rvoip_outl, 102 103 .mv_inb_p = hs7751rvoip_inb_p, 104 .mv_inw_p = hs7751rvoip_inw, 105 .mv_inl_p = hs7751rvoip_inl, 106 .mv_outb_p = hs7751rvoip_outb_p, 107 .mv_outw_p = hs7751rvoip_outw, 108 .mv_outl_p = hs7751rvoip_outl, 109 110 .mv_insb = hs7751rvoip_insb, 111 .mv_insw = hs7751rvoip_insw, 112 .mv_insl = hs7751rvoip_insl, 113 .mv_outsb = hs7751rvoip_outsb, 114 .mv_outsw = hs7751rvoip_outsw, 115 .mv_outsl = hs7751rvoip_outsl, 116 117 .mv_init_irq = hs7751rvoip_init_irq, 118 .mv_ioport_map = hs7751rvoip_ioport_map, 119}; 120ALIAS_MV(hs7751rvoip) 121