예제 #1
0
static int power_down(struct v4l2_subdev *sd)
{
	struct ov2680_device *dev = to_ov2680_sensor(sd);
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	int ret = 0;

	h_flag = 0;
	v_flag = 0;
	if (!dev->platform_data) {
		dev_err(&client->dev,
			"no camera_sensor_platform_data");
		return -ENODEV;
	}

	ret = dev->platform_data->flisclk_ctrl(sd, 0);
	if (ret)
		dev_err(&client->dev, "flisclk failed\n");

	/* gpio ctrl */
	ret = gpio_ctrl(sd, 0);
	if (ret) {
		ret = gpio_ctrl(sd, 0);
		if (ret)
			dev_err(&client->dev, "gpio failed 2\n");
	}

	/* power control */
	ret = power_ctrl(sd, 0);
	if (ret)
		dev_err(&client->dev, "vprog failed.\n");

	return ret;
}
예제 #2
0
파일: light.c 프로젝트: MorS25/amcfc
void light_ctrl(uint8 light,uint8 cmd)
{
    switch(light)
    {
        case RUNLIGHT:gpio_ctrl(PORTA,4,cmd);break;
        case WARNLIGHT:gpio_ctrl(PORTA,5,cmd);break;
        default:break;
    }
}
예제 #3
0
static int power_up(struct v4l2_subdev *sd)
{
	struct ov2680_device *dev = to_ov2680_sensor(sd);
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	int ret;

	if (!dev->platform_data) {
		dev_err(&client->dev,
			"no camera_sensor_platform_data");
		return -ENODEV;
	}

	/* power control */
	ret = power_ctrl(sd, 1);
	if (ret)
		goto fail_power;

	/* according to DS, at least 5ms is needed between DOVDD and PWDN */
	usleep_range(5000, 6000);

	/* gpio ctrl */
	ret = gpio_ctrl(sd, 1);
	if (ret) {
		ret = gpio_ctrl(sd, 1);
		if (ret)
			goto fail_power;
	}

	/* flis clock control */
	ret = dev->platform_data->flisclk_ctrl(sd, 1);
	if (ret)
		goto fail_clk;

	/* according to DS, 20ms is needed between PWDN and i2c access */
	msleep(20);

	return 0;

fail_clk:
	gpio_ctrl(sd, 0);
fail_power:
	power_ctrl(sd, 0);
	dev_err(&client->dev, "sensor power-up failed\n");

	return ret;
}
예제 #4
0
static int
phy_init(struct exynos_ehci_softc *esc)
{
	int reg;
	phandle_t hub;

	gpio_ctrl(esc, GPIO_INPUT, 1);

	/* set USB HOST mode */
	bus_space_write_4(esc->sysreg_bst, esc->sysreg_bsh,
	    EXYNOS5_SYSREG_USB2_PHY, USB2_MODE_HOST);

	/* Power ON phy */
	usb2_phy_power_on();

	reg = bus_space_read_4(esc->host_bst, esc->host_bsh, 0x0);
	reg &= ~(HOST_CTRL_CLK_MASK |
	    HOST_CTRL_RESET_PHY |
	    HOST_CTRL_RESET_PHY_ALL |
	    HOST_CTRL_SIDDQ |
	    HOST_CTRL_SUSPEND |
	    HOST_CTRL_SLEEP);

	reg |= (HOST_CTRL_CLK_24MHZ |
	    HOST_CTRL_RESET_LINK);
	bus_space_write_4(esc->host_bst, esc->host_bsh, 0x0, reg);

	DELAY(10);

	reg = bus_space_read_4(esc->host_bst, esc->host_bsh, 0x0);
	reg &= ~(HOST_CTRL_RESET_LINK);
	bus_space_write_4(esc->host_bst, esc->host_bsh, 0x0, reg);

	if ((hub = OF_finddevice("/hsichub")) != 0) {
		reset_hsic_hub(esc, hub);
	}

	gpio_ctrl(esc, GPIO_OUTPUT, 1);

	return (0);
}
예제 #5
0
static int
phy_init(struct exynos_ehci_softc *esc)
{
	int reg;

	gpio_ctrl(esc, GPIO_INPUT, 1);

	/* set USB HOST mode */
	bus_space_write_4(esc->sysreg_bst, esc->sysreg_bsh,
	    EXYNOS5_SYSREG_USB2_PHY, USB2_MODE_HOST);

	/* Power ON phy */
	bus_space_write_4(esc->pwr_bst, esc->pwr_bsh,
	    EXYNOS5_PWR_USBHOST_PHY, PHY_POWER_ON);

	reg = bus_space_read_4(esc->host_bst, esc->host_bsh, 0x0);
	reg &= ~(HOST_CTRL_CLK_MASK |
	    HOST_CTRL_RESET_PHY |
	    HOST_CTRL_RESET_PHY_ALL |
	    HOST_CTRL_SIDDQ |
	    HOST_CTRL_SUSPEND |
	    HOST_CTRL_SLEEP);

	reg |= (HOST_CTRL_CLK_24MHZ |
	    HOST_CTRL_RESET_LINK);
	bus_space_write_4(esc->host_bst, esc->host_bsh, 0x0, reg);

	DELAY(10);

	reg = bus_space_read_4(esc->host_bst, esc->host_bsh, 0x0);
	reg &= ~(HOST_CTRL_RESET_LINK);
	bus_space_write_4(esc->host_bst, esc->host_bsh, 0x0, reg);

	gpio_ctrl(esc, GPIO_OUTPUT, 1);

	return (0);
}
예제 #6
0
파일: light.c 프로젝트: MorS25/amcfc
void light_runtime(uint8 cmd)
{
  const uint8 light[4][40]={  {1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},    //RUN_LOCK
                              {1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0},    //RUN_MORMAL
                              {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}  ;
    static uint8 count=0;
    
    
    count++;
    if(count>=40)
        count=0;
    
    gpio_ctrl(PORTA,4,light[cmd][count]);
}
예제 #7
0
파일: light.c 프로젝트: MorS25/amcfc
void light_warning(uint8 cmd)
{
    const uint8 light[5][40]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},    //RUN_OK,warnning off
                              {1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},    //
                              {1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1},
                              {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                              {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}  ;
    static uint8 count=0;
    
    
    count++;
    if(count>=40)
        count=0;
    
    gpio_ctrl(PORTA,5,light[cmd][count]);
}