|  | @@ -178,3 +178,167 @@ static void bonito_fpga_init(void)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	irq_set_chained_handler(evt2irq(0x0340), bonito_fpga_irq_demux);
 | 
	
		
			
				|  |  | +	irq_set_irq_type(evt2irq(0x0340), IRQ_TYPE_LEVEL_LOW);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | +* PMIC settings
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +* FIXME
 | 
	
		
			
				|  |  | +*
 | 
	
		
			
				|  |  | +* bonito board needs some settings by pmic which use i2c access.
 | 
	
		
			
				|  |  | +* pmic settings use device_initcall() here for use it.
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  | +static __u8 *pmic_settings = NULL;
 | 
	
		
			
				|  |  | +static __u8 pmic_do_2A[] = {
 | 
	
		
			
				|  |  | +	0x1C, 0x09,
 | 
	
		
			
				|  |  | +	0x1A, 0x80,
 | 
	
		
			
				|  |  | +	0xff, 0xff,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static int __init pmic_init(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	struct i2c_adapter *a = i2c_get_adapter(0);
 | 
	
		
			
				|  |  | +	struct i2c_msg msg;
 | 
	
		
			
				|  |  | +	__u8 buf[2];
 | 
	
		
			
				|  |  | +	int i, ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pmic_settings)
 | 
	
		
			
				|  |  | +		return 0;
 | 
	
		
			
				|  |  | +	if (!a)
 | 
	
		
			
				|  |  | +		return 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	msg.addr	= 0x46;
 | 
	
		
			
				|  |  | +	msg.buf		= buf;
 | 
	
		
			
				|  |  | +	msg.len		= 2;
 | 
	
		
			
				|  |  | +	msg.flags	= 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for (i = 0; ; i += 2) {
 | 
	
		
			
				|  |  | +		buf[0] = pmic_settings[i + 0];
 | 
	
		
			
				|  |  | +		buf[1] = pmic_settings[i + 1];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if ((0xff == buf[0]) && (0xff == buf[1]))
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		ret = i2c_transfer(a, &msg, 1);
 | 
	
		
			
				|  |  | +		if (ret < 0) {
 | 
	
		
			
				|  |  | +			pr_err("i2c transfer fail\n");
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +device_initcall(pmic_init);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * LCDC0
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static const struct fb_videomode lcdc0_mode = {
 | 
	
		
			
				|  |  | +	.name		= "WVGA Panel",
 | 
	
		
			
				|  |  | +	.xres		= 800,
 | 
	
		
			
				|  |  | +	.yres		= 480,
 | 
	
		
			
				|  |  | +	.left_margin	= 88,
 | 
	
		
			
				|  |  | +	.right_margin	= 40,
 | 
	
		
			
				|  |  | +	.hsync_len	= 128,
 | 
	
		
			
				|  |  | +	.upper_margin	= 20,
 | 
	
		
			
				|  |  | +	.lower_margin	= 5,
 | 
	
		
			
				|  |  | +	.vsync_len	= 5,
 | 
	
		
			
				|  |  | +	.sync		= 0,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct sh_mobile_lcdc_info lcdc0_info = {
 | 
	
		
			
				|  |  | +	.clock_source	= LCDC_CLK_BUS,
 | 
	
		
			
				|  |  | +	.ch[0] = {
 | 
	
		
			
				|  |  | +		.chan			= LCDC_CHAN_MAINLCD,
 | 
	
		
			
				|  |  | +		.fourcc = V4L2_PIX_FMT_RGB565,
 | 
	
		
			
				|  |  | +		.interface_type		= RGB24,
 | 
	
		
			
				|  |  | +		.clock_divider		= 5,
 | 
	
		
			
				|  |  | +		.flags			= 0,
 | 
	
		
			
				|  |  | +		.lcd_modes		= &lcdc0_mode,
 | 
	
		
			
				|  |  | +		.num_modes		= 1,
 | 
	
		
			
				|  |  | +		.panel_cfg = {
 | 
	
		
			
				|  |  | +			.width	= 152,
 | 
	
		
			
				|  |  | +			.height = 91,
 | 
	
		
			
				|  |  | +		},
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct resource lcdc0_resources[] = {
 | 
	
		
			
				|  |  | +	[0] = {
 | 
	
		
			
				|  |  | +		.name	= "LCDC0",
 | 
	
		
			
				|  |  | +		.start	= 0xfe940000,
 | 
	
		
			
				|  |  | +		.end	= 0xfe943fff,
 | 
	
		
			
				|  |  | +		.flags	= IORESOURCE_MEM,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	[1] = {
 | 
	
		
			
				|  |  | +		.start	= intcs_evt2irq(0x0580),
 | 
	
		
			
				|  |  | +		.flags	= IORESOURCE_IRQ,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct platform_device lcdc0_device = {
 | 
	
		
			
				|  |  | +	.name		= "sh_mobile_lcdc_fb",
 | 
	
		
			
				|  |  | +	.id		= 0,
 | 
	
		
			
				|  |  | +	.resource	= lcdc0_resources,
 | 
	
		
			
				|  |  | +	.num_resources	= ARRAY_SIZE(lcdc0_resources),
 | 
	
		
			
				|  |  | +	.dev	= {
 | 
	
		
			
				|  |  | +		.platform_data	= &lcdc0_info,
 | 
	
		
			
				|  |  | +		.coherent_dma_mask = ~0,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * SMSC 9221
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static struct resource smsc_resources[] = {
 | 
	
		
			
				|  |  | +	[0] = {
 | 
	
		
			
				|  |  | +		.start		= 0x18010000,
 | 
	
		
			
				|  |  | +		.end		= 0x18011000 - 1,
 | 
	
		
			
				|  |  | +		.flags		= IORESOURCE_MEM,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	[1] = {
 | 
	
		
			
				|  |  | +		.start		= FPGA_ETH_IRQ,
 | 
	
		
			
				|  |  | +		.flags		= IORESOURCE_IRQ,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct smsc911x_platform_config smsc_platdata = {
 | 
	
		
			
				|  |  | +	.flags		= SMSC911X_USE_16BIT,
 | 
	
		
			
				|  |  | +	.phy_interface	= PHY_INTERFACE_MODE_MII,
 | 
	
		
			
				|  |  | +	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
 | 
	
		
			
				|  |  | +	.irq_type	= SMSC911X_IRQ_TYPE_PUSH_PULL,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct platform_device smsc_device = {
 | 
	
		
			
				|  |  | +	.name		= "smsc911x",
 | 
	
		
			
				|  |  | +	.dev  = {
 | 
	
		
			
				|  |  | +		.platform_data = &smsc_platdata,
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	.resource	= smsc_resources,
 | 
	
		
			
				|  |  | +	.num_resources	= ARRAY_SIZE(smsc_resources),
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * core board devices
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static struct platform_device *bonito_core_devices[] __initdata = {
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * base board devices
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static struct platform_device *bonito_base_devices[] __initdata = {
 | 
	
		
			
				|  |  | +	&lcdc0_device,
 | 
	
		
			
				|  |  | +	&smsc_device,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * map I/O
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static struct map_desc bonito_io_desc[] __initdata = {
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * for FPGA (0x1800000-0x19ffffff)
 | 
	
		
			
				|  |  | +	 * 0x18000000-0x18002000 -> 0xf0003000-0xf0005000
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	{
 |