コード例 #1
0
ファイル: msm8660-gpio.c プロジェクト: 10x-Amin/x10_Th_kernel
static int msm_gpio_get(struct gpio_chip *chip, unsigned offset)
{
	int i = 0;

	if (offset < NR_MSM_GPIOS)
		i = (readl(GPIO_IN_OUT(offset)) & 0x03);

	return i;
}
コード例 #2
0
unsigned __msm_gpiomux_read(unsigned gpio)
{
	int in_out, cfg;

	in_out = __raw_readl(GPIO_IN_OUT(gpio));
	cfg = __raw_readl(GPIO_CFG(gpio));

	return (in_out <<16) | cfg;
}
コード例 #3
0
ファイル: board-k2-camera.c プロジェクト: bgcngm/802Xtreem
void __init k2_init_cam(void)
{
	int rc = 0;
	int voltage = 0;

	pr_info("[CAM] msm8930_cam_common_configs");

	msm_gpiomux_install(msm8930_cam_common_configs,
			ARRAY_SIZE(msm8930_cam_common_configs));

	platform_device_register(&msm_camera_server);
	platform_device_register(&msm8960_device_csiphy0);
	platform_device_register(&msm8960_device_csiphy1);
	platform_device_register(&msm8960_device_csid0);
	platform_device_register(&msm8960_device_csid1);
	platform_device_register(&msm8960_device_ispif);
	platform_device_register(&msm8960_device_vfe);
	platform_device_register(&msm8960_device_vpe);

#ifdef CONFIG_I2C
	/* Pre-setting for i2c sensor device */
	rc = gpio_request(CAM_PIN_GPIO_CAM_ID, "MSM_CAM_ID");
	pr_info("[CAM] cam id gpio_request, %d\n", CAM_PIN_GPIO_CAM_ID);
	if (rc < 0)
		pr_err("[CAM] GPIO(%d) request failed\n", CAM_PIN_GPIO_CAM_ID);
	else {

		gpio_tlmm_config(
			GPIO_CFG(CAM_PIN_GPIO_CAM_ID, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA),
			GPIO_CFG_ENABLE);
		msleep(1);
		/* direction: GPIO_CFG_INPUT */
		voltage = readl(GPIO_IN_OUT(CAM_PIN_GPIO_CAM_ID)) & BIT(0);
		pr_info("[CAM] CAM ID voltage: %d\n", voltage);

		gpio_tlmm_config(
			GPIO_CFG(CAM_PIN_GPIO_CAM_ID, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA),
			GPIO_CFG_ENABLE);
		gpio_free(CAM_PIN_GPIO_CAM_ID);
	}

	if (0) { /* Always probe ov5693 by default */
		pr_info("[CAM] use s5k4e5yx and s5k6a1gx\n");
		k2_camera_board_info.board_info = k2_camera_i2c_boardinfo_old;
		k2_camera_board_info.num_i2c_board_info = ARRAY_SIZE(k2_camera_i2c_boardinfo_old);
	} else {
		k2_camera_board_info.board_info = k2_camera_i2c_boardinfo;
		k2_camera_board_info.num_i2c_board_info = ARRAY_SIZE(k2_camera_i2c_boardinfo);
	}
#endif

}
コード例 #4
0
void __msm_gpiomux_write(unsigned gpio, struct gpiomux_setting val)
{
	uint32_t bits;

	bits = (val.drv << 6) | (val.func << 2) | val.pull;
	if (val.func == GPIOMUX_FUNC_GPIO) {
		bits |= val.dir > GPIOMUX_IN ? BIT(9) : 0;
		__raw_writel(val.dir == GPIOMUX_OUT_HIGH ? BIT(1) : 0,
			GPIO_IN_OUT(gpio));
	}
	__raw_writel(bits, GPIO_CFG(gpio));
	mb();
}
コード例 #5
0
void __msm_gpio_get_dump_info(unsigned gpio, struct  msm_gpio_dump_info *data)
{
        unsigned flags;

        flags = __raw_readl(GPIO_CONFIG(gpio));
        data->pull = flags & 0x3;
        data->func_sel = (flags >> 2) & 0xf;
        data->drv = (flags >> 6) & 0x7;
        data->dir = (flags >> 9) & 0x1;

        if (data->dir)
                data->value = (__raw_readl(GPIO_IN_OUT(gpio)) >> 1) & 0x1;
        else {
コード例 #6
0
void msm_gpiomux_read(unsigned gpio, struct gpiomux_setting *val)
{
	uint32_t bits = readl_relaxed(GPIO_CFG(gpio));

	val->pull = bits & 0x3;
	val->func = (bits >> 2) & 0xf;
	val->drv = (bits >> 6) & 0x7;
	val->dir = bits & BIT_MASK(9) ? 1 : GPIOMUX_IN;

	if ((val->func == GPIOMUX_FUNC_GPIO) && (val->dir))
		val->dir = readl_relaxed(GPIO_IN_OUT(gpio)) & BIT_MASK(1) ?
			GPIOMUX_OUT_HIGH : GPIOMUX_OUT_LOW;
}
コード例 #7
0
void __msm_gpiomux_write(unsigned gpio, struct gpiomux_setting val)
{
	uint32_t bits;
	uint32_t gpio_in_out_value = 0;

/* <npdc300018062>  from here okajima 2012.4.12                 */
/* brief: to change setting for GPIO_IN_OUT resistor by GPIO No */
	if ((val.dir == GPIOMUX_OUT_HIGH) && (gpio != IN_CAMERA_GPIO) && (gpio != OUT_CAMERA_GPIO))
		gpio_in_out_value = BIT(1);
/* <npdc300018062> to here okajima 2012.4.12                     */

	bits = (val.drv << 6) | (val.func << 2) | val.pull;
	if (val.func == GPIOMUX_FUNC_GPIO) {
		bits |= val.dir > GPIOMUX_IN ? BIT(9) : 0;
/* <npdc300018062>  from here okajima 2012.4.12                 */
/* brief: to change setting for GPIO_IN_OUT resistor by GPIO No */
		/*__raw_writel(val.dir == GPIOMUX_OUT_HIGH ? BIT(1) : 0,*/
		__raw_writel(gpio_in_out_value,
/* <npdc300018062> to here okajima 2012.4.12                     */
			GPIO_IN_OUT(gpio));
	}
	__raw_writel(bits, GPIO_CFG(gpio));
	mb();
}
コード例 #8
0
ファイル: msm8660-gpio.c プロジェクト: 10x-Amin/x10_Th_kernel
static void msm_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
{
	if (offset < NR_MSM_GPIOS)
		writel((val ? 0x02 : 0x00), GPIO_IN_OUT(offset));
}
コード例 #9
0
void __msm_gpio_set_inout(unsigned gpio, unsigned val)
{
	__raw_writel(val ? BIT(GPIO_OUT_BIT) : 0, GPIO_IN_OUT(gpio));
}
コード例 #10
0
unsigned __msm_gpio_get_inout(unsigned gpio)
{
	return __raw_readl(GPIO_IN_OUT(gpio)) & BIT(GPIO_IN_BIT);
}
コード例 #11
0
#if defined(CONFIG_HTC_POWER_DEBUG) && defined(CONFIG_PINCTRL_MSM_TLMM_V3)
void __msm_gpio_get_dump_info(unsigned gpio, struct  msm_gpio_dump_info *data)
{
        unsigned flags;

        flags = __raw_readl(GPIO_CONFIG(gpio));
        data->pull = flags & 0x3;
        data->func_sel = (flags >> 2) & 0xf;
        data->drv = (flags >> 6) & 0x7;
        data->dir = (flags >> 9) & 0x1;

        if (data->dir)
                data->value = (__raw_readl(GPIO_IN_OUT(gpio)) >> 1) & 0x1;
        else {
                data->value = __raw_readl(GPIO_IN_OUT(gpio)) & 0x1;
                data->int_en = __raw_readl(GPIO_INTR_CFG(gpio)) & 0x1;
                if (data->int_en)
                        data->int_owner = (__raw_readl(GPIO_INTR_CFG(gpio)) >> 5) & 0x7;
        }
}
#endif
unsigned  __msm_gpio_get_intr_cfg_enable(unsigned gpio)
{
	return __msm_gpio_get_intr_config(gpio) & INTR_ENABLE;
}

void __msm_gpio_set_intr_cfg_type(unsigned gpio, unsigned type)
{
	unsigned cfg;