Beispiel #1
0
static void aic3008_amp_powerdown(int type)
{
	switch (type) {
	case HEADSET_AMP:
		if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
			power_deconfig("AUD_HEADPHONE_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT);
		}
		break;
	case SPEAKER_AMP:
		if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
#if (defined(CONFIG_SND_AMP_TFA9887))
			set_tfa9887_spkamp(0, 0);
#endif
		} else {
			power_deconfig("AUD_SPK_EN", TEGRA_GPIO_PP6, GPIO_OUTPUT);
		}
		break;
	case DOCK_AMP:
		if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
		} else {
			power_deconfig("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, GPIO_OUTPUT);
		}
		dock_config("TEGRA_GPIO_DESK_AUD", TEGRA_GPIO_PCC5, false, true);
		break;
	default:
		AUD_ERR("aic3008_amp_powerdown unknown type %d\n", type);
		break;
	}
	return;
}
static void aic3008_i2s_control(int dsp_enum)
{
    AUD_DBG("%s %d\n", __func__, dsp_enum);
	switch (dsp_enum) {
	case Phone_Default:
	case Phone_BT:
	case VOIP_BT:
	case VOIP_BT_HW_AEC:
		if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
			power_config("AUD_BT_SEL", TEGRA_GPIO_PK5, GPIO_OUTPUT);
		}
		break;
	case FM_Headset:
	case FM_Speaker:
		power_config("AUD_FM_SEL", TEGRA_GPIO_PK6, GPIO_OUTPUT);
		break;
	default:
		if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
			power_deconfig("AUD_BT_SEL", TEGRA_GPIO_PK5, GPIO_OUTPUT);
		}
		power_deconfig("AUD_FM_SEL", TEGRA_GPIO_PK6, GPIO_OUTPUT);
		break;
	}
	return;
}
static void enrc2u_comp_irq_init(void)
{
	int ret = 0;
	if(board_get_sku_tag() == 0x34600) {
		ret = gpio_request(TEGRA_GPIO_PN5, "COMP_INT");
		if (ret < 0) {
			pr_err("[COMP] %s: gpio_request failed %d\n", __func__, ret);
			return;
		}

		ret = gpio_direction_input(TEGRA_GPIO_PN5);
		if (ret < 0) {
			pr_err("[COMP] %s: gpio_direction_input failed %d\n", __func__, ret);
			gpio_free(TEGRA_GPIO_PN5);
			return;
		}

		tegra_gpio_enable(TEGRA_GPIO_PN5);
		tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_LCD_SDOUT, TEGRA_PUPD_PULL_DOWN);
	}
	else {
		// comp int
		if ( (htc_get_pcbid_info() < PROJECT_PHASE_XB)){
			ret = gpio_request(TEGRA_GPIO_PJ2, "COMP_INT");
			if (ret < 0) {
				pr_err("[COMP] %s: gpio_request failed %d\n", __func__, ret);
				return;
			}

			ret = gpio_direction_input(TEGRA_GPIO_PJ2);
			if (ret < 0) {
				pr_err("[COMP] %s: gpio_direction_input failed %d\n", __func__, ret);
				gpio_free(TEGRA_GPIO_PJ2);
				return;
		}

			tegra_gpio_enable(TEGRA_GPIO_PJ2);
			tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_GMI_CS1_N, TEGRA_PUPD_NORMAL);
		}
		else{
			ret = gpio_request(TEGRA_GPIO_PN5, "COMP_INT");
			if (ret < 0) {
				pr_err("[COMP] %s: gpio_request failed %d\n", __func__, ret);
				return;
			}

			ret = gpio_direction_input(TEGRA_GPIO_PN5);
			if (ret < 0) {
				pr_err("[COMP] %s: gpio_direction_input failed %d\n", __func__, ret);
				gpio_free(TEGRA_GPIO_PN5);
				return;
			}

			tegra_gpio_enable(TEGRA_GPIO_PN5);
			tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_LCD_SDOUT, TEGRA_PUPD_PULL_DOWN);

		}
	}
}
Beispiel #4
0
static void aic3008_hs_vol_control(int db)
{
	switch (db) {
		case BEATS_GAIN_ON:
			if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
				power_config("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, GPIO_OUTPUT);
			}
			break;
		case BEATS_GAIN_OFF:
			if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
				power_deconfig("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, GPIO_OUTPUT);
			}
			break;
		default:
			break;
	}
	return;
}
static void enrc2u_gsensor_irq_init(void)
{
	int ret = 0;
	if(board_get_sku_tag() == 0x34600) {
		ret = gpio_request(TEGRA_GPIO_PS0, "GSNR_INT");
		if (ret < 0) {
			pr_err("%s: gpio_request failed %d\n", __func__, ret);
			return;
		}

		ret = gpio_direction_input(TEGRA_GPIO_PS0);
		if (ret < 0) {
			pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
			gpio_free(TEGRA_GPIO_PS0);
			return;
		}
		tegra_gpio_enable(TEGRA_GPIO_PS0);
		tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_KB_ROW8, TEGRA_PUPD_PULL_DOWN);

	}
	else {
		if ( (htc_get_pcbid_info() < PROJECT_PHASE_XB)){
			ret = gpio_request(TEGRA_GPIO_PN5, "GSNR_INT");
			if (ret < 0) {
				pr_err("%s: gpio_request failed %d\n", __func__, ret);
				return;
			}

			ret = gpio_direction_input(TEGRA_GPIO_PN5);
			if (ret < 0) {
				pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
				gpio_free(TEGRA_GPIO_PN5);
				return;
			}
			tegra_gpio_enable(TEGRA_GPIO_PN5);
			tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_LCD_SDOUT, TEGRA_PUPD_PULL_DOWN);
		}
		else{
			ret = gpio_request(TEGRA_GPIO_PS0, "GSNR_INT");
			if (ret < 0) {
				pr_err("%s: gpio_request failed %d\n", __func__, ret);
				return;
			}

			ret = gpio_direction_input(TEGRA_GPIO_PS0);
			if (ret < 0) {
				pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
				gpio_free(TEGRA_GPIO_PS0);
				return;
			}
			tegra_gpio_enable(TEGRA_GPIO_PS0);
			tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_KB_ROW8, TEGRA_PUPD_PULL_DOWN);

		}
	}
}
Beispiel #6
0
static void aic3008_powerinit(void)
{
	power_config("AUD_MCLK_EN", TEGRA_GPIO_PX7, INIT_OUTPUT_HIGH);
	power_config("AUD_AIC3008_RST#", TEGRA_GPIO_PW5, INIT_OUTPUT_HIGH);

	power_config("AUD_MCLK", TEGRA_GPIO_PW4, INIT_OUTPUT_LOW);
	sfio_deconfig("AUD_MCLK", TEGRA_GPIO_PW4);

	if (pcbid >= PROJECT_PHASE_XB || board_get_sku_tag() == 0x34600) {
		power_config("AUD_HP_GAIN_CONTROL", TEGRA_GPIO_PD1, INIT_OUTPUT_LOW);
		power_config("AUD_SPK_RST#", TEGRA_GPIO_PP6, INIT_OUTPUT_HIGH);
		power_config("AUD_HEADPHONE_EN", TEGRA_GPIO_PP7, INIT_OUTPUT_LOW);
	} else {
		power_config("AUD_SPK_EN", TEGRA_GPIO_PP6, INIT_OUTPUT_LOW);
		power_config("AUD_LINEOUT_EN", TEGRA_GPIO_PP7, INIT_OUTPUT_LOW);
	}

	common_init();

	spin_lock_init(&aic3008_power_ctl->spin_lock);
	aic3008_power_ctl->isPowerOn = true;

	return;
}
static void enrc2u_mpuirq_init(void)
{
	int ret = 0;
	if(board_get_sku_tag() == 0x34600) {
		tegra_gpio_enable(TEGRA_GPIO_PJ2);
		ret = gpio_request(TEGRA_GPIO_PJ2, SENSOR_MPU_NAME);
		if (ret < 0) {
			pr_err("%s: gpio_request failed %d\n", __func__, ret);
				return;
		}

		ret = gpio_direction_input(TEGRA_GPIO_PJ2);
		if (ret < 0) {
			pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
			gpio_free(TEGRA_GPIO_PJ2);
			return;
		}
		tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_GMI_CS1_N, TEGRA_PUPD_PULL_DOWN);

                        i2c_register_board_info(0, mpu3050_i2c0_boardinfo_xb,
                                        ARRAY_SIZE(mpu3050_i2c0_boardinfo_xb));

	}
	else{
		if ( (htc_get_pcbid_info() < PROJECT_PHASE_XB)){
			tegra_gpio_enable(TEGRA_GPIO_PS0);
			ret = gpio_request(TEGRA_GPIO_PS0, SENSOR_MPU_NAME);
			if (ret < 0) {
				pr_err("%s: gpio_request failed %d\n", __func__, ret);
				return;
			}

			ret = gpio_direction_input(TEGRA_GPIO_PS0);
			if (ret < 0) {
				pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
				gpio_free(TEGRA_GPIO_PS0);
				return;
			}
			tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_KB_ROW8, TEGRA_PUPD_PULL_DOWN);

			i2c_register_board_info(0, mpu3050_i2c0_boardinfo,
						ARRAY_SIZE(mpu3050_i2c0_boardinfo));
		}

		else{
			tegra_gpio_enable(TEGRA_GPIO_PJ2);
			ret = gpio_request(TEGRA_GPIO_PJ2, SENSOR_MPU_NAME);
			if (ret < 0) {
				pr_err("%s: gpio_request failed %d\n", __func__, ret);
				return;
			}

			ret = gpio_direction_input(TEGRA_GPIO_PJ2);
			if (ret < 0) {
				pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
				gpio_free(TEGRA_GPIO_PJ2);
				return;
			}
			tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_GMI_CS1_N, TEGRA_PUPD_PULL_DOWN);

			i2c_register_board_info(0, mpu3050_i2c0_boardinfo_xb,
					ARRAY_SIZE(mpu3050_i2c0_boardinfo_xb));

		}
	}
}
static void __init marvel_init(void)
{
	int rc;
	int sku_id = 0;
	char *cid = NULL;
	struct kobject *properties_kobj;

	printk("marvel_init() revision = 0x%X\n", system_rev);
	msm_clock_init();
	board_get_cid_tag(&cid);
	sku_id = board_get_sku_tag();

	if (sku_id)
		printk(KERN_INFO "Marvel show_skuid: 0x%x\n", sku_id);
	/* for bcm */
	bt_export_bd_address();

	/*
	 * Setup common MSM GPIOS
	 */
	config_gpios();

	/* We need to set this pin to 0 only once on power-up; we will
	 * not actually enable the chip until we apply power to it via
	 * vreg.
	 */
	gpio_request(MARVEL_GPIO_LS_EN, "ls_en");
	gpio_direction_output(MARVEL_GPIO_LS_EN, 0);


	msm_hw_reset_hook = marvel_reset;

	msm_acpu_clock_init(&marvel_clock_data);
	perflock_init(&marvel_perflock_data);

#if defined(CONFIG_MSM_SERIAL_DEBUGGER)
	if (!opt_disable_uart3)
		msm_serial_debug_init(MSM_UART3_PHYS, INT_UART3,
			&msm_device_uart3.dev, 1,
				MSM_GPIO_TO_INT(MARVEL_GPIO_UART3_RX));
#endif

	msm_add_devices();

#ifdef CONFIG_SERIAL_MSM_HS
	msm_device_uart_dm1.dev.platform_data = &msm_uart_dm1_pdata;
	msm_device_uart_dm1.name = "msm_serial_hs_bcm";	/* for bcm */
	msm_add_serial_devices(3);
#else
	msm_add_serial_devices(0);
#endif

	msm_add_serial_devices(2);
	/*
	msm_change_usb_id(0x0bb4, 0x0c10);
	*/
#ifdef CONFIG_USB_FUNCTION
	msm_add_usb_id_pin_gpio(MARVEL_GPIO_USB_ID_PIN);
	msm_add_usb_devices(marvel_phy_reset, NULL);
#endif

#ifdef CONFIG_USB_ANDROID
	android_usb_pdata.products[0].product_id =
		android_usb_pdata.product_id;
	android_usb_pdata.serial_number = board_serialno();
	msm_hsusb_pdata.serial_number = board_serialno();
	if ((sku_id & 0xFFF00) == 0x2AB00) {
		msm_hsusb_pdata.accessory_detect = 2; /* detect by ADC */
		msm_hsusb_pdata.use_microp_adc = 1;
	}
	msm_device_hsusb.dev.platform_data = &msm_hsusb_pdata;
	config_marvel_usb_id_gpios(0);
	platform_device_register(&msm_device_hsusb);
	platform_device_register(&usb_mass_storage_device);
	platform_device_register(&android_usb_device);
#endif
	msm_add_mem_devices(&pmem_setting);

#ifdef CONFIG_MICROP_COMMON
	marvel_microp_init();
#endif

	rc = marvel_init_mmc(system_rev);
	if (rc)
		printk(KERN_CRIT "%s: MMC init failure (%d)\n", __func__, rc);

	properties_kobj = kobject_create_and_add("board_properties", NULL);
	if (properties_kobj)
		rc = sysfs_create_group(properties_kobj,
						&marvel_properties_attr_group);
	if (!properties_kobj || rc)
		pr_err("failed to create board_properties\n");

	printk(KERN_INFO "[HS_BOARD] (%s) system_rev = %d\n", __func__,
	       system_rev);
	if (system_rev > 1 || ((sku_id & 0xFFF00) == 0x2AB00)) {
		htc_headset_microp.dev.platform_data =
			&htc_headset_microp_data_xc;
		htc_headset_mgr_data.headset_config_num =
			ARRAY_SIZE(htc_headset_mgr_config);
		htc_headset_mgr_data.headset_config = htc_headset_mgr_config;
		printk(KERN_INFO "[HS_BOARD] (%s) Set MEMS config\n", __func__);
	}
	if (system_rev >= 1 && ((sku_id & 0xFFF00) == 0x2AB00)) {
		htc_headset_microp.dev.platform_data =
			&htc_headset_microp_data_b14_xb;
		printk(KERN_INFO "[HS_BOARD] (%s) Set B14 ADC\n", __func__);
	}

	/* probe camera driver */
	i2c_register_board_info(0, i2c_camera_devices, ARRAY_SIZE(i2c_camera_devices));

	msm_device_i2c_init();
	platform_add_devices(devices, ARRAY_SIZE(devices));

	if ((sku_id & 0xFFF00) == 0x2AB00) {
		printk(KERN_INFO "Marvel#B14: use BMA250\n");
		i2c_register_board_info(0, i2c_devices_B14,
				ARRAY_SIZE(i2c_devices_B14));

		/* probe g-sensor driver */
		i2c_register_board_info(0, i2c_bma250_devices,
		ARRAY_SIZE(i2c_bma250_devices));

	} else {
		printk(KERN_INFO "Marvel: use BMA023\n");
		i2c_register_board_info(0, i2c_devices,
				ARRAY_SIZE(i2c_devices));
	}

	marvel_init_panel();

	marvel_init_keypad();

	marvel_wifi_init();

	msm_init_pmic_vibrator(2800);
}