Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'sh/g3-prep'

+197 -175
+1 -1
arch/sh/boards/board-ap325rxa.c
··· 20 20 #include <linux/smc911x.h> 21 21 #include <media/soc_camera_platform.h> 22 22 #include <media/sh_mobile_ceu.h> 23 - #include <asm/sh_mobile_lcdc.h> 23 + #include <video/sh_mobile_lcdc.h> 24 24 #include <asm/io.h> 25 25 #include <asm/clock.h> 26 26
+1 -1
arch/sh/boards/mach-migor/lcd_qvga.c
··· 17 17 #include <linux/init.h> 18 18 #include <linux/kernel.h> 19 19 #include <linux/module.h> 20 - #include <asm/sh_mobile_lcdc.h> 20 + #include <video/sh_mobile_lcdc.h> 21 21 #include <asm/migor.h> 22 22 23 23 /* LCD Module is a PH240320T according to board schematics. This module
+1 -1
arch/sh/boards/mach-migor/setup.c
··· 19 19 #include <linux/clk.h> 20 20 #include <media/soc_camera_platform.h> 21 21 #include <media/sh_mobile_ceu.h> 22 + #include <video/sh_mobile_lcdc.h> 22 23 #include <asm/clock.h> 23 24 #include <asm/machvec.h> 24 25 #include <asm/io.h> 25 26 #include <asm/sh_keysc.h> 26 - #include <asm/sh_mobile_lcdc.h> 27 27 #include <asm/migor.h> 28 28 29 29 /* Address IRQ Size Bus Description
+2 -90
arch/sh/include/asm/hw_irq.h
··· 2 2 #define __ASM_SH_HW_IRQ_H 3 3 4 4 #include <linux/init.h> 5 + #include <linux/sh_intc.h> 5 6 #include <asm/atomic.h> 6 7 7 8 extern atomic_t irq_err_count; ··· 24 23 25 24 void register_ipr_controller(struct ipr_desc *); 26 25 27 - typedef unsigned char intc_enum; 28 - 29 - struct intc_vect { 30 - intc_enum enum_id; 31 - unsigned short vect; 32 - }; 33 - 34 - #define INTC_VECT(enum_id, vect) { enum_id, vect } 35 - #define INTC_IRQ(enum_id, irq) INTC_VECT(enum_id, irq2evt(irq)) 36 - 37 - struct intc_group { 38 - intc_enum enum_id; 39 - intc_enum enum_ids[32]; 40 - }; 41 - 42 - #define INTC_GROUP(enum_id, ids...) { enum_id, { ids } } 43 - 44 - struct intc_mask_reg { 45 - unsigned long set_reg, clr_reg, reg_width; 46 - intc_enum enum_ids[32]; 47 - #ifdef CONFIG_SMP 48 - unsigned long smp; 49 - #endif 50 - }; 51 - 52 - struct intc_prio_reg { 53 - unsigned long set_reg, clr_reg, reg_width, field_width; 54 - intc_enum enum_ids[16]; 55 - #ifdef CONFIG_SMP 56 - unsigned long smp; 57 - #endif 58 - }; 59 - 60 - struct intc_sense_reg { 61 - unsigned long reg, reg_width, field_width; 62 - intc_enum enum_ids[16]; 63 - }; 64 - 65 - #ifdef CONFIG_SMP 66 - #define INTC_SMP(stride, nr) .smp = (stride) | ((nr) << 8) 67 - #else 68 - #define INTC_SMP(stride, nr) 69 - #endif 70 - 71 - struct intc_desc { 72 - struct intc_vect *vectors; 73 - unsigned int nr_vectors; 74 - struct intc_group *groups; 75 - unsigned int nr_groups; 76 - struct intc_mask_reg *mask_regs; 77 - unsigned int nr_mask_regs; 78 - struct intc_prio_reg *prio_regs; 79 - unsigned int nr_prio_regs; 80 - struct intc_sense_reg *sense_regs; 81 - unsigned int nr_sense_regs; 82 - char *name; 83 - #if defined(CONFIG_CPU_SH3) || defined(CONFIG_CPU_SH4A) 84 - struct intc_mask_reg *ack_regs; 85 - unsigned int nr_ack_regs; 86 - #endif 87 - }; 88 - 89 - #define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a) 90 - #define DECLARE_INTC_DESC(symbol, chipname, vectors, groups, \ 91 - mask_regs, prio_regs, sense_regs) \ 92 - struct intc_desc symbol __initdata = { \ 93 - _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 94 - _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 95 - _INTC_ARRAY(sense_regs), \ 96 - chipname, \ 97 - } 98 - 99 - #if defined(CONFIG_CPU_SH3) || defined(CONFIG_CPU_SH4A) 100 - #define DECLARE_INTC_DESC_ACK(symbol, chipname, vectors, groups, \ 101 - mask_regs, prio_regs, sense_regs, ack_regs) \ 102 - struct intc_desc symbol __initdata = { \ 103 - _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 104 - _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 105 - _INTC_ARRAY(sense_regs), \ 106 - chipname, \ 107 - _INTC_ARRAY(ack_regs), \ 108 - } 109 - #endif 110 - 111 - void __init register_intc_controller(struct intc_desc *desc); 112 - int intc_set_priority(unsigned int irq, unsigned int prio); 113 - 114 26 void __init plat_irq_setup(void); 115 - #ifdef CONFIG_CPU_SH3 116 27 void __init plat_irq_setup_sh3(void); 117 - #endif 28 + void __init plat_irq_setup_pins(int mode); 118 29 119 30 enum { IRQ_MODE_IRQ, IRQ_MODE_IRQ7654, IRQ_MODE_IRQ3210, 120 31 IRQ_MODE_IRL7654_MASK, IRQ_MODE_IRL3210_MASK, 121 32 IRQ_MODE_IRL7654, IRQ_MODE_IRL3210 }; 122 - void __init plat_irq_setup_pins(int mode); 123 33 124 34 #endif /* __ASM_SH_HW_IRQ_H */
+36 -41
arch/sh/include/asm/io.h
··· 101 101 #define outsw __outsw 102 102 #define outsl __outsl 103 103 104 - #define __raw_readb(a) __readb((void __iomem *)(a)) 105 - #define __raw_readw(a) __readw((void __iomem *)(a)) 106 - #define __raw_readl(a) __readl((void __iomem *)(a)) 107 - #define __raw_writeb(v, a) __writeb(v, (void __iomem *)(a)) 108 - #define __raw_writew(v, a) __writew(v, (void __iomem *)(a)) 109 - #define __raw_writel(v, a) __writel(v, (void __iomem *)(a)) 104 + #define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a) = (v)) 105 + #define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v)) 106 + #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v)) 110 107 111 - void __raw_writesl(unsigned long addr, const void *data, int longlen); 112 - void __raw_readsl(unsigned long addr, void *data, int longlen); 108 + #define __raw_readb(a) (__chk_io_ptr(a), *(volatile unsigned char __force *)(a)) 109 + #define __raw_readw(a) (__chk_io_ptr(a), *(volatile unsigned short __force *)(a)) 110 + #define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a)) 111 + 112 + void __raw_writesl(void __iomem *addr, const void *data, int longlen); 113 + void __raw_readsl(const void __iomem *addr, void *data, int longlen); 113 114 114 115 /* 115 116 * The platform header files may define some of these macros to use 116 117 * the inlined versions where appropriate. These macros may also be 117 118 * redefined by userlevel programs. 118 119 */ 119 - #ifdef __readb 120 - # define readb(a) ({ unsigned int r_ = __raw_readb(a); mb(); r_; }) 121 - #endif 122 - #ifdef __raw_readw 123 - # define readw(a) ({ unsigned int r_ = __raw_readw(a); mb(); r_; }) 124 - #endif 125 - #ifdef __raw_readl 126 - # define readl(a) ({ unsigned int r_ = __raw_readl(a); mb(); r_; }) 127 - #endif 120 + #define readb(a) ({ unsigned int r_ = __readb(a); mb(); r_; }) 121 + #define readw(a) ({ unsigned int r_ = __readw(a); mb(); r_; }) 122 + #define readl(a) ({ unsigned int r_ = __readl(a); mb(); r_; }) 128 123 129 - #ifdef __raw_writeb 130 - # define writeb(v,a) ({ __raw_writeb((v),(a)); mb(); }) 131 - #endif 132 - #ifdef __raw_writew 133 - # define writew(v,a) ({ __raw_writew((v),(a)); mb(); }) 134 - #endif 135 - #ifdef __raw_writel 136 - # define writel(v,a) ({ __raw_writel((v),(a)); mb(); }) 137 - #endif 124 + #define writeb(v,a) ({ __writeb((v),(a)); mb(); }) 125 + #define writew(v,a) ({ __writew((v),(a)); mb(); }) 126 + #define writel(v,a) ({ __writel((v),(a)); mb(); }) 138 127 139 128 #define __BUILD_MEMORY_STRING(bwlq, type) \ 140 129 \ 141 - static inline void writes##bwlq(volatile void __iomem *mem, \ 130 + static inline void __raw_writes##bwlq(volatile void __iomem *mem, \ 142 131 const void *addr, unsigned int count) \ 143 132 { \ 144 133 const volatile type *__addr = addr; \ ··· 138 149 } \ 139 150 } \ 140 151 \ 141 - static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \ 142 - unsigned int count) \ 152 + static inline void __raw_reads##bwlq(volatile void __iomem *mem, \ 153 + void *addr, unsigned int count) \ 143 154 { \ 144 155 volatile type *__addr = addr; \ 145 156 \ ··· 151 162 152 163 __BUILD_MEMORY_STRING(b, u8) 153 164 __BUILD_MEMORY_STRING(w, u16) 165 + 166 + #define writesb __raw_writesb 167 + #define writesw __raw_writesw 154 168 #define writesl __raw_writesl 169 + 170 + #define readsb __raw_readsb 171 + #define readsw __raw_readsw 155 172 #define readsl __raw_readsl 156 173 157 174 #define readb_relaxed(a) readb(a) ··· 165 170 #define readl_relaxed(a) readl(a) 166 171 167 172 /* Simple MMIO */ 168 - #define ioread8(a) readb(a) 169 - #define ioread16(a) readw(a) 173 + #define ioread8(a) __raw_readb(a) 174 + #define ioread16(a) __raw_readw(a) 170 175 #define ioread16be(a) be16_to_cpu(__raw_readw((a))) 171 - #define ioread32(a) readl(a) 176 + #define ioread32(a) __raw_readl(a) 172 177 #define ioread32be(a) be32_to_cpu(__raw_readl((a))) 173 178 174 - #define iowrite8(v,a) writeb((v),(a)) 175 - #define iowrite16(v,a) writew((v),(a)) 179 + #define iowrite8(v,a) __raw_writeb((v),(a)) 180 + #define iowrite16(v,a) __raw_writew((v),(a)) 176 181 #define iowrite16be(v,a) __raw_writew(cpu_to_be16((v)),(a)) 177 - #define iowrite32(v,a) writel((v),(a)) 182 + #define iowrite32(v,a) __raw_writel((v),(a)) 178 183 #define iowrite32be(v,a) __raw_writel(cpu_to_be32((v)),(a)) 179 184 180 - #define ioread8_rep(a, d, c) readsb((a), (d), (c)) 181 - #define ioread16_rep(a, d, c) readsw((a), (d), (c)) 182 - #define ioread32_rep(a, d, c) readsl((a), (d), (c)) 185 + #define ioread8_rep(a, d, c) __raw_readsb((a), (d), (c)) 186 + #define ioread16_rep(a, d, c) __raw_readsw((a), (d), (c)) 187 + #define ioread32_rep(a, d, c) __raw_readsl((a), (d), (c)) 183 188 184 - #define iowrite8_rep(a, s, c) writesb((a), (s), (c)) 185 - #define iowrite16_rep(a, s, c) writesw((a), (s), (c)) 186 - #define iowrite32_rep(a, s, c) writesl((a), (s), (c)) 189 + #define iowrite8_rep(a, s, c) __raw_writesb((a), (s), (c)) 190 + #define iowrite16_rep(a, s, c) __raw_writesw((a), (s), (c)) 191 + #define iowrite32_rep(a, s, c) __raw_writesl((a), (s), (c)) 187 192 188 193 #define mmiowb() wmb() /* synco on SH-4A, otherwise a nop */ 189 194
+1 -1
arch/sh/include/asm/migor.h
··· 54 54 55 55 #define BSC_CS6ABCR 0xfec1001c 56 56 57 - #include <asm/sh_mobile_lcdc.h> 57 + #include <video/sh_mobile_lcdc.h> 58 58 59 59 int migor_lcd_qvga_setup(void *board_data, void *sys_ops_handle, 60 60 struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
arch/sh/include/asm/sh_mobile_lcdc.h include/video/sh_mobile_lcdc.h
-2
arch/sh/kernel/cpu/irq/Makefile
··· 1 1 # 2 2 # Makefile for the Linux/SuperH CPU-specifc IRQ handlers. 3 3 # 4 - obj-y += intc.o 5 - 6 4 obj-$(CONFIG_SUPERH32) += imask.o 7 5 obj-$(CONFIG_CPU_SH5) += intc-sh5.o 8 6 obj-$(CONFIG_CPU_HAS_IPR_IRQ) += ipr.o
+13 -12
arch/sh/kernel/cpu/irq/intc.c drivers/sh/intc.c
··· 21 21 #include <linux/io.h> 22 22 #include <linux/interrupt.h> 23 23 #include <linux/bootmem.h> 24 + #include <linux/sh_intc.h> 24 25 25 26 #define _INTC_MK(fn, mode, addr_e, addr_d, width, shift) \ 26 27 ((shift) | ((width) << 5) | ((fn) << 9) | ((mode) << 13) | \ ··· 87 86 88 87 static void write_8(unsigned long addr, unsigned long h, unsigned long data) 89 88 { 90 - ctrl_outb(set_field(0, data, h), addr); 89 + __raw_writeb(set_field(0, data, h), addr); 91 90 } 92 91 93 92 static void write_16(unsigned long addr, unsigned long h, unsigned long data) 94 93 { 95 - ctrl_outw(set_field(0, data, h), addr); 94 + __raw_writew(set_field(0, data, h), addr); 96 95 } 97 96 98 97 static void write_32(unsigned long addr, unsigned long h, unsigned long data) 99 98 { 100 - ctrl_outl(set_field(0, data, h), addr); 99 + __raw_writel(set_field(0, data, h), addr); 101 100 } 102 101 103 102 static void modify_8(unsigned long addr, unsigned long h, unsigned long data) 104 103 { 105 104 unsigned long flags; 106 105 local_irq_save(flags); 107 - ctrl_outb(set_field(ctrl_inb(addr), data, h), addr); 106 + __raw_writeb(set_field(__raw_readb(addr), data, h), addr); 108 107 local_irq_restore(flags); 109 108 } 110 109 ··· 112 111 { 113 112 unsigned long flags; 114 113 local_irq_save(flags); 115 - ctrl_outw(set_field(ctrl_inw(addr), data, h), addr); 114 + __raw_writew(set_field(__raw_readw(addr), data, h), addr); 116 115 local_irq_restore(flags); 117 116 } 118 117 ··· 120 119 { 121 120 unsigned long flags; 122 121 local_irq_save(flags); 123 - ctrl_outl(set_field(ctrl_inl(addr), data, h), addr); 122 + __raw_writel(set_field(__raw_readl(addr), data, h), addr); 124 123 local_irq_restore(flags); 125 124 } 126 125 ··· 247 246 addr = INTC_REG(d, _INTC_ADDR_D(handle), 0); 248 247 switch (_INTC_FN(handle)) { 249 248 case REG_FN_MODIFY_BASE + 0: /* 8bit */ 250 - ctrl_inb(addr); 251 - ctrl_outb(0xff ^ set_field(0, 1, handle), addr); 249 + __raw_readb(addr); 250 + __raw_writeb(0xff ^ set_field(0, 1, handle), addr); 252 251 break; 253 252 case REG_FN_MODIFY_BASE + 1: /* 16bit */ 254 - ctrl_inw(addr); 255 - ctrl_outw(0xffff ^ set_field(0, 1, handle), addr); 253 + __raw_readw(addr); 254 + __raw_writew(0xffff ^ set_field(0, 1, handle), addr); 256 255 break; 257 256 case REG_FN_MODIFY_BASE + 3: /* 32bit */ 258 - ctrl_inl(addr); 259 - ctrl_outl(0xffffffff ^ set_field(0, 1, handle), addr); 257 + __raw_readl(addr); 258 + __raw_writel(0xffffffff ^ set_field(0, 1, handle), addr); 260 259 break; 261 260 default: 262 261 BUG();
+2 -2
arch/sh/kernel/cpu/irq/ipr.c
··· 33 33 struct ipr_data *p = get_irq_chip_data(irq); 34 34 unsigned long addr = get_ipr_desc(irq)->ipr_offsets[p->ipr_idx]; 35 35 /* Set the priority in IPR to 0 */ 36 - ctrl_outw(ctrl_inw(addr) & (0xffff ^ (0xf << p->shift)), addr); 36 + __raw_writew(__raw_readw(addr) & (0xffff ^ (0xf << p->shift)), addr); 37 37 } 38 38 39 39 static void enable_ipr_irq(unsigned int irq) ··· 41 41 struct ipr_data *p = get_irq_chip_data(irq); 42 42 unsigned long addr = get_ipr_desc(irq)->ipr_offsets[p->ipr_idx]; 43 43 /* Set priority in IPR back to original value */ 44 - ctrl_outw(ctrl_inw(addr) | (p->priority << p->shift), addr); 44 + __raw_writew(__raw_readw(addr) | (p->priority << p->shift), addr); 45 45 } 46 46 47 47 /*
+4 -4
arch/sh/lib/io.c
··· 14 14 #include <linux/module.h> 15 15 #include <linux/io.h> 16 16 17 - void __raw_readsl(unsigned long addr, void *datap, int len) 17 + void __raw_readsl(const void __iomem *addr, void *datap, int len) 18 18 { 19 19 u32 *data; 20 20 21 21 for (data = datap; (len != 0) && (((u32)data & 0x1f) != 0); len--) 22 - *data++ = ctrl_inl(addr); 22 + *data++ = __raw_readl(addr); 23 23 24 24 if (likely(len >= (0x20 >> 2))) { 25 25 int tmp2, tmp3, tmp4, tmp5, tmp6; ··· 59 59 } 60 60 61 61 for (; len != 0; len--) 62 - *data++ = ctrl_inl(addr); 62 + *data++ = __raw_readl(addr); 63 63 } 64 64 EXPORT_SYMBOL(__raw_readsl); 65 65 66 - void __raw_writesl(unsigned long addr, const void *data, int len) 66 + void __raw_writesl(void __iomem *addr, const void *data, int len) 67 67 { 68 68 if (likely(len != 0)) { 69 69 int tmp1;
+33 -12
drivers/serial/sh-sci.c
··· 3 3 * 4 4 * SuperH on-chip serial module support. (SCI with no FIFO / with FIFO) 5 5 * 6 - * Copyright (C) 2002 - 2006 Paul Mundt 6 + * Copyright (C) 2002 - 2008 Paul Mundt 7 7 * Modified to support SH7720 SCIF. Markus Brunner, Mark Jonas (Jul 2007). 8 8 * 9 9 * based off of the old drivers/char/sh-sci.c by: ··· 46 46 #include <linux/cpufreq.h> 47 47 #include <linux/clk.h> 48 48 #include <linux/ctype.h> 49 + #include <linux/err.h> 49 50 50 51 #ifdef CONFIG_SUPERH 51 52 #include <asm/clock.h> ··· 1133 1132 break; 1134 1133 } 1135 1134 1136 - #if defined(CONFIG_CPU_SUBTYPE_SH5_101) || defined(CONFIG_CPU_SUBTYPE_SH5_103) 1137 - if (port->mapbase == 0) 1135 + if (port->flags & UPF_IOREMAP && !port->membase) { 1136 + #if defined(CONFIG_SUPERH64) 1138 1137 port->mapbase = onchip_remap(SCIF_ADDR_SH5, 1024, "SCIF"); 1139 - 1140 - port->membase = (void __iomem *)port->mapbase; 1138 + port->membase = (void __iomem *)port->mapbase; 1139 + #else 1140 + port->membase = ioremap_nocache(port->mapbase, 0x40); 1141 1141 #endif 1142 + 1143 + printk(KERN_ERR "sci: can't remap port#%d\n", port->line); 1144 + } 1142 1145 } 1143 1146 1144 1147 static int sci_verify_port(struct uart_port *port, struct serial_struct *ser) ··· 1428 1423 static int __devinit sci_probe(struct platform_device *dev) 1429 1424 { 1430 1425 struct plat_sci_port *p = dev->dev.platform_data; 1431 - int i; 1426 + int i, ret = -EINVAL; 1432 1427 1433 1428 for (i = 0; p && p->flags != 0; p++, i++) { 1434 1429 struct sci_port *sciport = &sci_ports[i]; ··· 1445 1440 1446 1441 sciport->port.mapbase = p->mapbase; 1447 1442 1448 - /* 1449 - * For the simple (and majority of) cases where we don't need 1450 - * to do any remapping, just cast the cookie directly. 1451 - */ 1452 - if (p->mapbase && !p->membase && !(p->flags & UPF_IOREMAP)) 1453 - p->membase = (void __iomem *)p->mapbase; 1443 + if (p->mapbase && !p->membase) { 1444 + if (p->flags & UPF_IOREMAP) { 1445 + p->membase = ioremap_nocache(p->mapbase, 0x40); 1446 + if (IS_ERR(p->membase)) { 1447 + ret = PTR_ERR(p->membase); 1448 + goto err_unreg; 1449 + } 1450 + } else { 1451 + /* 1452 + * For the simple (and majority of) cases 1453 + * where we don't need to do any remapping, 1454 + * just cast the cookie directly. 1455 + */ 1456 + p->membase = (void __iomem *)p->mapbase; 1457 + } 1458 + } 1454 1459 1455 1460 sciport->port.membase = p->membase; 1456 1461 ··· 1491 1476 #endif 1492 1477 1493 1478 return 0; 1479 + 1480 + err_unreg: 1481 + for (i = i - 1; i >= 0; i--) 1482 + uart_remove_one_port(&sci_uart_driver, &sci_ports[i].port); 1483 + 1484 + return ret; 1494 1485 } 1495 1486 1496 1487 static int __devexit sci_remove(struct platform_device *dev)
+4 -6
drivers/serial/sh-sci.h
··· 320 320 #define SCI_EVENT_WRITE_WAKEUP 0 321 321 322 322 #define SCI_IN(size, offset) \ 323 - unsigned int addr = port->mapbase + (offset); \ 324 323 if ((size) == 8) { \ 325 - return ctrl_inb(addr); \ 324 + return ioread8(port->membase + (offset)); \ 326 325 } else { \ 327 - return ctrl_inw(addr); \ 326 + return ioread16(port->membase + (offset)); \ 328 327 } 329 328 #define SCI_OUT(size, offset, value) \ 330 - unsigned int addr = port->mapbase + (offset); \ 331 329 if ((size) == 8) { \ 332 - ctrl_outb(value, addr); \ 330 + iowrite8(value, port->membase + (offset)); \ 333 331 } else if ((size) == 16) { \ 334 - ctrl_outw(value, addr); \ 332 + iowrite16(value, port->membase + (offset)); \ 335 333 } 336 334 337 335 #define CPU_SCIx_FNS(name, sci_offset, sci_size, scif_offset, scif_size)\
+1 -1
drivers/sh/Makefile
··· 1 1 # 2 2 # Makefile for the SuperH specific drivers. 3 3 # 4 - 5 4 obj-$(CONFIG_SUPERHYWAY) += superhyway/ 6 5 obj-$(CONFIG_MAPLE) += maple/ 6 + obj-y += intc.o
+7 -1
drivers/video/sh_mobile_lcdcfb.c
··· 16 16 #include <linux/clk.h> 17 17 #include <linux/platform_device.h> 18 18 #include <linux/dma-mapping.h> 19 - #include <asm/sh_mobile_lcdc.h> 19 + #include <video/sh_mobile_lcdc.h> 20 20 21 21 #define PALETTE_NR 16 22 22 ··· 34 34 35 35 struct sh_mobile_lcdc_priv { 36 36 void __iomem *base; 37 + #ifdef CONFIG_HAVE_CLK 37 38 struct clk *clk; 39 + #endif 38 40 unsigned long lddckr; 39 41 struct sh_mobile_lcdc_chan ch[2]; 40 42 }; ··· 424 422 425 423 priv->lddckr = icksel << 16; 426 424 425 + #ifdef CONFIG_HAVE_CLK 427 426 if (str) { 428 427 priv->clk = clk_get(dev, str); 429 428 if (IS_ERR(priv->clk)) { ··· 434 431 435 432 clk_enable(priv->clk); 436 433 } 434 + #endif 437 435 438 436 return 0; 439 437 } ··· 692 688 fb_dealloc_cmap(&info->cmap); 693 689 } 694 690 691 + #ifdef CONFIG_HAVE_CLK 695 692 if (priv->clk) { 696 693 clk_disable(priv->clk); 697 694 clk_put(priv->clk); 698 695 } 696 + #endif 699 697 700 698 if (priv->base) 701 699 iounmap(priv->base);
+91
include/linux/sh_intc.h
··· 1 + #ifndef __SH_INTC_H 2 + #define __SH_INTC_H 3 + 4 + typedef unsigned char intc_enum; 5 + 6 + struct intc_vect { 7 + intc_enum enum_id; 8 + unsigned short vect; 9 + }; 10 + 11 + #define INTC_VECT(enum_id, vect) { enum_id, vect } 12 + #define INTC_IRQ(enum_id, irq) INTC_VECT(enum_id, irq2evt(irq)) 13 + 14 + struct intc_group { 15 + intc_enum enum_id; 16 + intc_enum enum_ids[32]; 17 + }; 18 + 19 + #define INTC_GROUP(enum_id, ids...) { enum_id, { ids } } 20 + 21 + struct intc_mask_reg { 22 + unsigned long set_reg, clr_reg, reg_width; 23 + intc_enum enum_ids[32]; 24 + #ifdef CONFIG_SMP 25 + unsigned long smp; 26 + #endif 27 + }; 28 + 29 + struct intc_prio_reg { 30 + unsigned long set_reg, clr_reg, reg_width, field_width; 31 + intc_enum enum_ids[16]; 32 + #ifdef CONFIG_SMP 33 + unsigned long smp; 34 + #endif 35 + }; 36 + 37 + struct intc_sense_reg { 38 + unsigned long reg, reg_width, field_width; 39 + intc_enum enum_ids[16]; 40 + }; 41 + 42 + #ifdef CONFIG_SMP 43 + #define INTC_SMP(stride, nr) .smp = (stride) | ((nr) << 8) 44 + #else 45 + #define INTC_SMP(stride, nr) 46 + #endif 47 + 48 + struct intc_desc { 49 + struct intc_vect *vectors; 50 + unsigned int nr_vectors; 51 + struct intc_group *groups; 52 + unsigned int nr_groups; 53 + struct intc_mask_reg *mask_regs; 54 + unsigned int nr_mask_regs; 55 + struct intc_prio_reg *prio_regs; 56 + unsigned int nr_prio_regs; 57 + struct intc_sense_reg *sense_regs; 58 + unsigned int nr_sense_regs; 59 + char *name; 60 + #if defined(CONFIG_CPU_SH3) || defined(CONFIG_CPU_SH4A) 61 + struct intc_mask_reg *ack_regs; 62 + unsigned int nr_ack_regs; 63 + #endif 64 + }; 65 + 66 + #define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a) 67 + #define DECLARE_INTC_DESC(symbol, chipname, vectors, groups, \ 68 + mask_regs, prio_regs, sense_regs) \ 69 + struct intc_desc symbol __initdata = { \ 70 + _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 71 + _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 72 + _INTC_ARRAY(sense_regs), \ 73 + chipname, \ 74 + } 75 + 76 + #if defined(CONFIG_CPU_SH3) || defined(CONFIG_CPU_SH4A) 77 + #define DECLARE_INTC_DESC_ACK(symbol, chipname, vectors, groups, \ 78 + mask_regs, prio_regs, sense_regs, ack_regs) \ 79 + struct intc_desc symbol __initdata = { \ 80 + _INTC_ARRAY(vectors), _INTC_ARRAY(groups), \ 81 + _INTC_ARRAY(mask_regs), _INTC_ARRAY(prio_regs), \ 82 + _INTC_ARRAY(sense_regs), \ 83 + chipname, \ 84 + _INTC_ARRAY(ack_regs), \ 85 + } 86 + #endif 87 + 88 + void __init register_intc_controller(struct intc_desc *desc); 89 + int intc_set_priority(unsigned int irq, unsigned int prio); 90 + 91 + #endif /* __SH_INTC_H */