setup.c revision efd590d57a5edddabaaf4cfaf532c0f674193b81
102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt/* 202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * Renesas Technology Europe SDK7786 Support. 302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * 402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * Copyright (C) 2010 Matt Fleming 502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * Copyright (C) 2010 Paul Mundt 602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * 702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * This file is subject to the terms and conditions of the GNU General Public 802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * License. See the file "COPYING" in the main directory of this archive 902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * for more details. 1002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt */ 1102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <linux/init.h> 1202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <linux/platform_device.h> 1302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <linux/io.h> 1402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <linux/smsc911x.h> 1502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <linux/i2c.h> 1602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <linux/irq.h> 17c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt#include <linux/clk.h> 1802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <asm/machvec.h> 192267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt#include <asm/heartbeat.h> 2002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt#include <asm/sizes.h> 21efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt#include <mach/fpga.h> 2202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 232267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundtstatic struct resource heartbeat_resource = { 242267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .start = 0x07fff8b0, 252267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .end = 0x07fff8b0 + sizeof(u16) - 1, 262267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .flags = IORESOURCE_MEM | IORESOURCE_MEM_16BIT, 272267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt}; 282267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt 292267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundtstatic struct platform_device heartbeat_device = { 302267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .name = "heartbeat", 312267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .id = -1, 322267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .num_resources = 1, 332267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt .resource = &heartbeat_resource, 342267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt}; 352267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt 3602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct resource smsc911x_resources[] = { 3702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt [0] = { 3802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .name = "smsc911x-memory", 3902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .start = 0x07ffff00, 4002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .end = 0x07ffff00 + SZ_256 - 1, 4102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .flags = IORESOURCE_MEM, 4202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt }, 4302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt [1] = { 4402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .name = "smsc911x-irq", 4502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .start = evt2irq(0x2c0), 4602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .end = evt2irq(0x2c0), 4702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .flags = IORESOURCE_IRQ, 4802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt }, 4902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 5002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 5102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct smsc911x_platform_config smsc911x_config = { 5202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, 5302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, 5402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .flags = SMSC911X_USE_32BIT, 5502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .phy_interface = PHY_INTERFACE_MODE_MII, 5602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 5702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 5802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct platform_device smsc911x_device = { 5902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .name = "smsc911x", 6002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .id = -1, 6102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .num_resources = ARRAY_SIZE(smsc911x_resources), 6202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .resource = smsc911x_resources, 6302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .dev = { 6402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .platform_data = &smsc911x_config, 6502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt }, 6602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 6702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 6802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct resource smbus_fpga_resource = { 6902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .start = 0x07fff9e0, 7002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .end = 0x07fff9e0 + SZ_32 - 1, 7102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .flags = IORESOURCE_MEM, 7202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 7302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 7402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct platform_device smbus_fpga_device = { 7502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .name = "i2c-sdk7786", 7602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .id = 0, 7702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .num_resources = 1, 7802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .resource = &smbus_fpga_resource, 7902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 8002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 8102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct resource smbus_pcie_resource = { 8202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .start = 0x07fffc30, 8302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .end = 0x07fffc30 + SZ_32 - 1, 8402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .flags = IORESOURCE_MEM, 8502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 8602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 8702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct platform_device smbus_pcie_device = { 8802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .name = "i2c-sdk7786", 8902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .id = 1, 9002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .num_resources = 1, 9102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .resource = &smbus_pcie_resource, 9202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 9302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 9402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct i2c_board_info __initdata sdk7786_i2c_devices[] = { 9502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt { 9602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt I2C_BOARD_INFO("max6900", 0x68), 9702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt }, 9802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 9902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 10002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct platform_device *sh7786_devices[] __initdata = { 1012267c7875b3a3a41b7a8cc9659d75ec934c98ffdPaul Mundt &heartbeat_device, 10202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt &smsc911x_device, 10302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt &smbus_fpga_device, 10402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt &smbus_pcie_device, 10502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 10602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 10702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic int sdk7786_i2c_setup(void) 10802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt{ 10902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt unsigned int tmp; 11002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 11102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt /* 11202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * Hand over I2C control to the FPGA. 11302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt */ 114efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt tmp = fpga_read_reg(SBCR); 11502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt tmp &= ~SCBR_I2CCEN; 11602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt tmp |= SCBR_I2CMEN; 117efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt fpga_write_reg(tmp, SBCR); 11802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 11902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt return i2c_register_board_info(0, sdk7786_i2c_devices, 12002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt ARRAY_SIZE(sdk7786_i2c_devices)); 12102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt} 12202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 12302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic int __init sdk7786_devices_setup(void) 12402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt{ 12502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt int ret; 12602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 12702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt ret = platform_add_devices(sh7786_devices, ARRAY_SIZE(sh7786_devices)); 12802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt if (unlikely(ret != 0)) 12902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt return ret; 13002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 13102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt return sdk7786_i2c_setup(); 13202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt} 13302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt__initcall(sdk7786_devices_setup); 13402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 13502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtenum { 13602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt ATA_IRQ_BIT = 1, 13702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt SPI_BUSY_BIT = 2, 13802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt LIRQ5_BIT = 3, 13902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt LIRQ6_BIT = 4, 14002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt LIRQ7_BIT = 5, 14102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt LIRQ8_BIT = 6, 14202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt KEY_IRQ_BIT = 7, 14302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt PEN_IRQ_BIT = 8, 14402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt ETH_IRQ_BIT = 9, 14502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt RTC_ALARM_BIT = 10, 14602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt CRYSTAL_FAIL_BIT = 12, 14702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt ETH_PME_BIT = 14, 14802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 14902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 15002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic void __init init_sdk7786_IRQ(void) 15102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt{ 15202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt unsigned int tmp; 15302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 15402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt /* Enable priority encoding for all IRLs */ 15502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt fpga_write_reg(fpga_read_reg(INTMSR) | 0x0303, INTMSR); 15602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 15702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt /* Clear FPGA interrupt status registers */ 15802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt fpga_write_reg(0x0000, INTASR); 15902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt fpga_write_reg(0x0000, INTBSR); 16002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 16102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt /* Unmask FPGA interrupts */ 16202bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt tmp = fpga_read_reg(INTAMR); 16302bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt tmp &= ~(1 << ETH_IRQ_BIT); 16402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt fpga_write_reg(tmp, INTAMR); 16502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 16602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt plat_irq_setup_pins(IRQ_MODE_IRL7654_MASK); 16702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt plat_irq_setup_pins(IRQ_MODE_IRL3210_MASK); 16802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt} 16902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 1706f832e8aab8c4c6d28629e970e4a85e74a8d0be6Paul Mundtstatic int sdk7786_mode_pins(void) 1716f832e8aab8c4c6d28629e970e4a85e74a8d0be6Paul Mundt{ 172efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt return fpga_read_reg(MODSWR); 1736f832e8aab8c4c6d28629e970e4a85e74a8d0be6Paul Mundt} 1746f832e8aab8c4c6d28629e970e4a85e74a8d0be6Paul Mundt 175c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundtstatic int sdk7786_clk_init(void) 176c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt{ 177c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt struct clk *clk; 178c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt int ret; 179c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt 180c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt /* 181c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt * Only handle the EXTAL case, anyone interfacing a crystal 182c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt * resonator will need to provide their own input clock. 183c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt */ 184c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt if (test_mode_pin(MODE_PIN9)) 185c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt return -EINVAL; 186c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt 187c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt clk = clk_get(NULL, "extal"); 188c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt if (!clk || IS_ERR(clk)) 189c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt return PTR_ERR(clk); 190c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt ret = clk_set_rate(clk, 33333333); 191c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt clk_put(clk); 192c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt 193c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt return ret; 194c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt} 195c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt 19602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt/* Initialize the board */ 19702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic void __init sdk7786_setup(char **cmdline_p) 19802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt{ 199efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt pr_info("Renesas Technology Europe SDK7786 support:\n"); 200efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt 201efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt sdk7786_fpga_init(); 202efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt 203efd590d57a5edddabaaf4cfaf532c0f674193b81Paul Mundt pr_info("\tPCB revision:\t%d\n", fpga_read_reg(PCBRR) & 0xf); 20402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt} 20502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt 20602bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt/* 20702bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt * The Machine Vector 20802bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt */ 20902bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundtstatic struct sh_machine_vector mv_sdk7786 __initmv = { 21002bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .mv_name = "SDK7786", 21102bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .mv_setup = sdk7786_setup, 2126f832e8aab8c4c6d28629e970e4a85e74a8d0be6Paul Mundt .mv_mode_pins = sdk7786_mode_pins, 213c8098218271d19e7123d8b9137b9a4b87e5ffec0Paul Mundt .mv_clk_init = sdk7786_clk_init, 21402bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt .mv_init_irq = init_sdk7786_IRQ, 21502bf6cc72cc2a6258411ddf1649f33a65fc9a06ePaul Mundt}; 216