void __init fixup_archos(struct machine_desc *desc,
		struct tag *tags, char **cmdline, struct meminfo *mi)
{
	if ( machine_is_archos_a43() || machine_is_archos_a70s()) {
		// regular boards
		*cmdline = command_line[0];
	} else if (machine_is_archos_a70h()) {
		// hdd boards
		*cmdline = command_line[1];
	} else if (machine_is_archos_a28()) {
		// 3611 boards
		*cmdline = command_line[2];
	} else if (machine_is_archos_a35()) {
		// 3611 boards with bigger screen...
		*cmdline = command_line[3];
	} else if (machine_is_archos_a101it() || machine_is_archos_a70s2()) {
		// Bigger Screen
		*cmdline = command_line[4];
	} else if (machine_is_archos_a32() || machine_is_archos_a32sd() || machine_is_archos_a35dm() || machine_is_archos_a35de()) {
		// Small screen and only TV out
		*cmdline = command_line[5];
	} else if (machine_is_archos_a70h2()) {
		// hdd boards with bigger screen...
		*cmdline = command_line[6];
	} else {
		printk("%s : NO COMMAND LINE FOUND!", __FUNCTION__);
		return;
	}

	printk("fixup_archos: [%s]\n", *cmdline);
}
예제 #2
0
int __init panel_wqvga_32_init(struct omap_dss_device *disp_data)
{
    const struct archos_display_config *disp_cfg;
    int ret = -ENODEV;

    pr_debug("panel_wqvga_32_init\n");

    disp_cfg = omap_get_config( ARCHOS_TAG_DISPLAY, struct archos_display_config );
    if (disp_cfg == NULL)
        return ret;

    if ( hardware_rev >= disp_cfg->nrev ) {
        printk(KERN_DEBUG "archos_display_init: hardware_rev (%i) >= nrev (%i)\n",
               hardware_rev, disp_cfg->nrev);
        return ret;
    }

    display_gpio = disp_cfg->rev[hardware_rev];

    /* init spi, bus line is used as mcspi */
    omap_cfg_reg(display_gpio.spi.spi_clk.mux_cfg);
    omap_cfg_reg(display_gpio.spi.spi_cs.mux_cfg);
    omap_cfg_reg(display_gpio.spi.spi_data.mux_cfg);

    spi_register_board_info(lcd_spi_board_info, 1);

    panel_init(&byd_wqvga_32_panel);

#if defined(CONFIG_FB_OMAP_BOOTLOADER_INIT)
    panel_set_backlight_level(NULL, 255);
#endif
    if ( machine_is_archos_a32() && ( hardware_rev < 3 ) ) {
        byd_wqvga_32_panel.phy.dpi.data_lines = 24;
        byd_wqvga_32_panel.phy.dpi.dither = OMAP_DSS_DITHER_NONE;
    }
    *disp_data = byd_wqvga_32_panel;

    return 0;
}
예제 #3
0
static int __init usb_android_init(void)
{
#if defined(CONFIG_USB_ANDROID) || defined(CONFIG_USB_ANDROID_MODULE)

	u32 prod_id[4];

	get_dieid(prod_id);

	if (machine_is_archos_a32()) {
		sprintf(android_usb_pdata.serial_number, "A32-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1416;
		android_usb_pdata.product_name = A32;
		android_usb_pdata.nluns = 1;
		usb_mass_storage_pdata.product = A32;
	} else if ( machine_is_archos_a28() ) {
		sprintf(android_usb_pdata.serial_number, "A28-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1415;
		android_usb_pdata.product_name = A28;
		android_usb_pdata.nluns = 1;
		usb_mass_storage_pdata.product = A28;
	} else if ( machine_is_archos_a35() ) {
		sprintf(android_usb_pdata.serial_number, "A35-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1424;
		android_usb_pdata.product_name = A35;
		android_usb_pdata.nluns = 2;
		usb_mass_storage_pdata.product = A35;
	} else if ( machine_is_archos_a35dm() ) {
		sprintf(android_usb_pdata.serial_number, "A35DM-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1425;
		android_usb_pdata.product_name = A35DM;
		android_usb_pdata.nluns = 2;
		usb_mass_storage_pdata.product = A35DM;
	} else if ( machine_is_archos_a43() ) {
		sprintf(android_usb_pdata.serial_number, "A43-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1417;
		android_usb_pdata.product_name = A43;
		android_usb_pdata.nluns = 2;
		usb_mass_storage_pdata.product = A43;
	} else if ( machine_is_archos_a101it() ) {
		sprintf(android_usb_pdata.serial_number, "A10-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1419;
		android_usb_pdata.product_name = A10;
		android_usb_pdata.nluns = 2;
		usb_mass_storage_pdata.product = A10;
	} else if ( machine_is_archos_a70s() ||  machine_is_archos_a70h() ) {
		sprintf(android_usb_pdata.serial_number, "A70-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1420;
		if( machine_is_archos_a70s()){
			android_usb_pdata.product_id = 0x1420;
			android_usb_pdata.product_name = A70S;
			android_usb_pdata.nluns = 2;
			usb_mass_storage_pdata.product = A70S;
		}else{
			android_usb_pdata.product_id = 0x1422;
			android_usb_pdata.product_name = A70H;
			android_usb_pdata.nluns = 1;
			usb_mass_storage_pdata.product = A70H;
		}
	} else if ( machine_is_archos_a32sd() ) {
		sprintf(android_usb_pdata.serial_number, "A32-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
		android_usb_pdata.product_id = 0x1423;
		android_usb_pdata.product_name = A32SD;
		android_usb_pdata.nluns = 2;
		usb_mass_storage_pdata.product = A32SD;
	} else {
		sprintf(android_usb_pdata.serial_number, "A5x-%08X-%08X-%08X-%08X", prod_id[0],prod_id[1],prod_id[2],prod_id[3]);
	}
	
	if ( machine_charges_from_USB() ) {
		android_usb_pdata.bmAttributes = USB_CONFIG_ATT_ONE;
		android_usb_pdata.bMaxPower = 250; /* 500mA */
	} else {
		android_usb_pdata.bmAttributes	= USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
		android_usb_pdata.bMaxPower	= CONFIG_USB_GADGET_VBUS_DRAW / 2;
	}
	
	printk(KERN_ERR "registering Android USB device (%s)\n", android_usb_pdata.serial_number);

	if (platform_device_register(&android_usb_device) < 0) {
		printk(KERN_ERR "Unable to register Android USB device\n");
		return -ENODEV;
	}
	printk(KERN_ERR "registering Android USB mass storage device  (%s)\n", android_usb_pdata.serial_number);
	if (platform_device_register(&android_usb_mass_storage) < 0) {
		printk(KERN_ERR "Unable to register Android USB mass storage device\n");
		return -ENODEV;
	}
#endif

	return 0;
}
예제 #4
0
int __init archos_audio_gpio_init(void)
{
	const struct archos_audio_config *audio_cfg;
	struct clk *clkout2_src_ck;
	struct clk *sys_clkout2;
	struct clk *core_ck;

	/* audio  */
	audio_cfg = omap_get_config( ARCHOS_TAG_AUDIO, struct archos_audio_config );
	if (audio_cfg == NULL) {
		pr_err("archos_audio_gpio_init: no board configuration found\n");
		return -ENODEV;
	}
	if ( hardware_rev >= audio_cfg->nrev ) {
		pr_err("archos_audio_gpio_init: hardware_rev (%i) >= nrev (%i)\n",
			hardware_rev, audio_cfg->nrev);
		return -ENODEV;
	}

	audio_gpio = audio_cfg->rev[hardware_rev];

	// a32 & a43 protos where using clkout1.
	if (hardware_rev >= 1 || !(machine_is_archos_a32() || machine_is_archos_a43())) {
		core_ck = clk_get(NULL, "cm_96m_fck");
		if (IS_ERR(core_ck)) {
			printk(KERN_ERR "failed to get core_ck\n");
		}
	
		clkout2_src_ck = clk_get(NULL, "clkout2_src_ck");
		if (IS_ERR(clkout2_src_ck)) {
			printk(KERN_ERR "failed to get clkout2_src_ck\n");
		}
	
		sys_clkout2 = clk_get(NULL, "sys_clkout2");
		if (IS_ERR(sys_clkout2)) {
			printk(KERN_ERR "failed to get sys_clkout2\n");
		}
	
		if ( clk_set_parent(clkout2_src_ck, core_ck) != 0) {
			printk(KERN_ERR "failed to set sys_clkout2 parent to clkout2\n");
		}
	
		/* Set the clock to 12 Mhz */
		omap2_clksel_set_rate(sys_clkout2, 12000000);

		clk_put(sys_clkout2);
		clk_put(clkout2_src_ck);
		clk_put(core_ck);

		sysclock_name = sys_clkout2_name;
		use_mcbsp1_fclk = 1;
	} else {
		sysclock_name = sys_clkout1_name;
	}

	if (GPIO_PIN( audio_gpio.spdif ) != -1)
		archos_gpio_init_output( &audio_gpio.spdif, "spdif" );

	if (GPIO_PIN( audio_gpio.hp_on ) != -1)
		archos_gpio_init_output( &audio_gpio.hp_on, "hp_on" );

	if (GPIO_PIN( audio_gpio.headphone_plugged ) != -1)
		archos_gpio_init_input( &audio_gpio.headphone_plugged, "hp_detect" );

	if (GPIO_PIN( audio_gpio.vamp_vbat ) != -1)
		archos_gpio_init_output( &audio_gpio.vamp_vbat, "vamp_vbat" );
	if (GPIO_PIN( audio_gpio.vamp_dc ) != -1)
		archos_gpio_init_output( &audio_gpio.vamp_dc, "vamp_dc" );

	// XXX maybe prevents OFF mode?
	if (GPIO_PIN( audio_gpio.headphone_plugged ) != -1)
		gpio_set_debounce(GPIO_PIN(audio_gpio.headphone_plugged), (1 + 1) * 0x1f);

	if (GPIO_PIN(audio_gpio.vamp_dc) != -1) {
		int ret = platform_device_register(&archos_audio_vamp_device);
		if (ret < 0)
			return ret;

		ret = platform_driver_register(&archos_audio_vamp_driver);
		if (ret < 0)
			return ret;

		ret = device_create_file(&archos_audio_vamp_device.dev, &dev_attr_vamp_vusb_ctrl);
		if (ret < 0)
			return ret;

		hrtimer_init(&vamp_watchdog_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
		vamp_watchdog_timer.function = vamp_watchdog_timer_func;
	}

	pr_debug("%s init done\n", __FUNCTION__);
	return 0;
}