コード例 #1
0
int ricoh619_poll_pwr_key_sta(void)
{
	i2c_set_bus_num(ricoh619.pmic->bus);
	i2c_init(CONFIG_SYS_I2C_SPEED, ricoh619.pmic->hw.i2c.addr);
	i2c_set_bus_speed(CONFIG_SYS_I2C_SPEED);
	return i2c_reg_read(ricoh619.pmic->hw.i2c.addr, 0x14) & 0x01;	
}
コード例 #2
0
/*
 * i2c_init - Init function
 * @speed:	required i2c speed
 * @slaveadd:	slave address for the device
 *
 * Initialization function.
 */
void i2c_init(int speed, int slaveadd)
{
	unsigned int enbl;

	/* Disable i2c */
	enbl = readl(&i2c_regs_p->ic_enable);
	enbl &= ~IC_ENABLE_0B;
	writel(enbl, &i2c_regs_p->ic_enable);

	writel((IC_CON_SD | IC_CON_SPD_FS | IC_CON_MM), &i2c_regs_p->ic_con);
	writel(IC_RX_TL, &i2c_regs_p->ic_rx_tl);
	writel(IC_TX_TL, &i2c_regs_p->ic_tx_tl);
	i2c_set_bus_speed(speed);
	writel(IC_STOP_DET, &i2c_regs_p->ic_intr_mask);
	writel(slaveadd, &i2c_regs_p->ic_sar);

	/* Enable i2c */
	enbl = readl(&i2c_regs_p->ic_enable);
	enbl |= IC_ENABLE_0B;
	writel(enbl, &i2c_regs_p->ic_enable);

#ifdef CONFIG_I2C_MULTI_BUS
	bus_initialized[current_bus] = 1;
#endif
}
コード例 #3
0
ファイル: board.c プロジェクト: OpenNoah/u-boot
void am33xx_spl_board_init(void)
{
	unsigned int oldspeed;
	unsigned short buf;

	struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER;
	struct cm_wkuppll *const cmwkup = (struct cm_wkuppll *)CM_WKUP;
	/*
	 * enable additional clocks of modules which are accessed later from
	 * VxWorks OS
	 */
	u32 *const clk_domains[] = { 0 };

	u32 *const clk_modules_xre1specific[] = {
		&cmwkup->wkup_adctscctrl,
		&cmper->spi1clkctrl,
		&cmper->dcan0clkctrl,
		&cmper->dcan1clkctrl,
		&cmper->epwmss0clkctrl,
		&cmper->epwmss1clkctrl,
		&cmper->epwmss2clkctrl,
		&cmper->lcdclkctrl,
		&cmper->lcdcclkstctrl,
		0
	};
	do_enable_clocks(clk_domains, clk_modules_xre1specific, 1);
	/* power-OFF LCD-Display */
	gpio_direction_output(LCD_PWR, 0);

	/* setup I2C */
	enable_i2c_pin_mux();
	i2c_set_bus_num(0);
	i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);

	/* power-ON  3V3 via Resetcontroller */
	oldspeed = i2c_get_bus_speed();
	if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
		buf = RSTCTRL_FORCE_PWR_NEN | RSTCTRL_CAN_STB;
		i2c_write(RSTCTRL_ADDR, RSTCTRL_CTRLREG, 1,
			  (uint8_t *)&buf, sizeof(buf));
		i2c_set_bus_speed(oldspeed);
	} else {
		puts("ERROR: i2c_set_bus_speed failed! (turn on PWR_nEN)\n");
	}

	pmicsetup(0);
}
コード例 #4
0
ファイル: i2c-uclass.c プロジェクト: jhendrix/deg-uboot
static int i2c_post_probe(struct udevice *dev)
{
	struct dm_i2c_bus *i2c = dev->uclass_priv;

	i2c->speed_hz = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
				     "clock-frequency", 100000);

	return i2c_set_bus_speed(dev, i2c->speed_hz);
}
コード例 #5
0
void pmic_ricoh619_shut_down(void)
{
    i2c_set_bus_num(ricoh619.pmic->bus);
    i2c_init (CONFIG_SYS_I2C_SPEED, ricoh619.pmic->hw.i2c.addr);
    i2c_set_bus_speed(CONFIG_SYS_I2C_SPEED);
    i2c_reg_write(ricoh619.pmic->hw.i2c.addr, 0xe0, i2c_reg_read(ricoh619.pmic->hw.i2c.addr,0xe0) & 0xfe);
    i2c_reg_write(ricoh619.pmic->hw.i2c.addr, 0x0f, i2c_reg_read(ricoh619.pmic->hw.i2c.addr,0x0f) & 0xfe);   
    i2c_reg_write(ricoh619.pmic->hw.i2c.addr, 0x0e, i2c_reg_read(ricoh619.pmic->hw.i2c.addr,0x0e) | 0x01);  
}
コード例 #6
0
ファイル: pmic_rt5025.c プロジェクト: mq002/miqi-uboot
void pmic_rt5025_shut_down(void)
{
	i2c_set_bus_num(rt5025.pmic->bus);
    	i2c_init (RT5025_I2C_SPEED, rt5025.pmic->hw.i2c.addr);
    	i2c_set_bus_speed(RT5025_I2C_SPEED);
	i2c_reg_write(rt5025.pmic->hw.i2c.addr, RT5025_REG_CHANNELH, 0x00);
	i2c_reg_write(rt5025.pmic->hw.i2c.addr, RT5025_REG_CHANNELH, 0x80);
	i2c_reg_write(rt5025.pmic->hw.i2c.addr, RT5025_REG_MISC3, i2c_reg_read(rt5025.pmic->hw.i2c.addr, RT5025_REG_MISC3) | 0x80);

}
コード例 #7
0
ファイル: pmic_rk818.c プロジェクト: mq002/miqi-uboot
void pmic_rk818_shut_down(void)
{
	u8 reg;
	i2c_set_bus_num(rk818.pmic->bus);
    	i2c_init (RK818_I2C_SPEED, rk818.pmic->hw.i2c.addr);
    	i2c_set_bus_speed(RK818_I2C_SPEED);
	reg = i2c_reg_read(rk818.pmic->hw.i2c.addr, RK818_DEVCTRL_REG);
	i2c_reg_write(rk818.pmic->hw.i2c.addr, RK818_DEVCTRL_REG, (reg |(0x1 <<0)));

}
コード例 #8
0
void i2c_init ()
{
	printf("Init: i2c\n\r");

	imx27_clock_enable_line (IMX27_CLOCK_I2C1);

	i2c->i2cr = 0;
	i2c_set_bus_speed(100000);

	i2c->iadr = 9<<1; /* slave #9 */

	i2c->i2cr = I2CR_IEN;
	i2c->i2sr = 0;
}
コード例 #9
0
ファイル: pmic_rt5025.c プロジェクト: mq002/miqi-uboot
static int rt5025_pre_init(unsigned char bus,uchar addr)
{
	debug("%s,line=%d\n", __func__,__LINE__);
	 
	i2c_set_bus_num(bus);
	i2c_init(RT5025_I2C_SPEED, addr);
	i2c_set_bus_speed(RT5025_I2C_SPEED);

	i2c_reg_write(addr, RT5025_REG_CHGCTL2, i2c_reg_read(addr, RT5025_REG_CHGCTL2) | 0xf0); /*set chg time*/
	i2c_reg_write(addr, 0x17, i2c_reg_read(addr, 0x17) & 0x1f); /*power off 2.8v*/
 	i2c_reg_write(addr, 0x52,i2c_reg_read(addr,0x52)|0x02); /*no action when vref*/
	i2c_reg_write(addr, 0x08, (i2c_reg_read(addr,0x08) & 0x03) |0x40); /*set arm 1.1v*/
	i2c_reg_write(addr, 0x09, (i2c_reg_read(addr,0x09) & 0x01) |0x20); /*set logic 1.1v*/
// 	i2c_reg_write(addr, RT5025_REG_LDOONOFF,
//		i2c_reg_read(addr, RT5025_REG_LDOONOFF) |RT5025_LDOEN_MASK6); /*enable ldo6*/
	return 0;
}
コード例 #10
0
ファイル: pmic_rk818.c プロジェクト: mq002/miqi-uboot
static int rk818_pre_init(unsigned char bus,uchar addr)
{
	debug("%s,line=%d\n", __func__,__LINE__);
	 
	i2c_set_bus_num(bus);
	i2c_init(RK818_I2C_SPEED, addr);
	i2c_set_bus_speed(RK818_I2C_SPEED);

	i2c_reg_write(addr, 0xa1,i2c_reg_read(addr,0xa1)|0x70); /*close charger when usb low then 3.4V*/
 	i2c_reg_write(addr, 0x52,i2c_reg_read(addr,0x52)|0x02); /*no action when vref*/
 	i2c_reg_write(addr, RK818_DCDC_EN_REG,
		i2c_reg_read(addr, RK818_DCDC_EN_REG) |0x60); /*enable switch & ldo9*/
//	i2c_reg_write(addr, RK818_LDO_EN_REG,
//		i2c_reg_read(addr, RK818_LDO_EN_REG) |0x28);
 	
	/**********enable clkout2****************/
        i2c_reg_write(addr,RK818_CLK32OUT_REG,0x01);
      
	return 0;
}
コード例 #11
0
/*
 * i2c_init - Init function
 * @speed:	required i2c speed
 * @slaveadd:	slave address for the spear device
 *
 * Initialization function.
 */
void i2c_init(int speed, int slaveadd)
{
	unsigned int enbl;

	/* Disable i2c */
	enbl = readl(&i2c_regs_p->ic_enable);
	enbl &= ~IC_ENABLE_0B;
	writel(enbl, &i2c_regs_p->ic_enable);

	writel((IC_CON_SD | IC_CON_SPD_FS | IC_CON_MM), &i2c_regs_p->ic_con);
	writel(IC_RX_TL, &i2c_regs_p->ic_rx_tl);
	writel(IC_TX_TL, &i2c_regs_p->ic_tx_tl);
	i2c_set_bus_speed(speed);
	writel(IC_STOP_DET, &i2c_regs_p->ic_intr_mask);
	writel(slaveadd, &i2c_regs_p->ic_sar);

	/* Enable i2c */
	enbl = readl(&i2c_regs_p->ic_enable);
	enbl |= IC_ENABLE_0B;
	writel(enbl, &i2c_regs_p->ic_enable);
}
コード例 #12
0
ファイル: pmic_rk808.c プロジェクト: michalliu/rkchrome_uboot
int pmic_rk808_init(unsigned char bus)
{
	int ret;
	if (!rk808.pmic) {
		ret = rk808_parse_dt(gd->fdt_blob);
		if (ret < 0)
			return ret;
	}
	
	rk808.pmic->interface = PMIC_I2C;
	//enable lcdc power ldo, and enable other ldo 
	i2c_set_bus_num(rk808.pmic->bus);
	charger_init(0);
	i2c_init(RK808_I2C_SPEED, rk808.pmic->hw.i2c.addr);
	i2c_set_bus_speed(RK808_I2C_SPEED);
	i2c_reg_write(0x1b,0x23,i2c_reg_read(0x1b,0x23)|0x60);
	i2c_reg_write(0x1b,0x45,0x02);
	i2c_reg_write(0x1b,0x24,i2c_reg_read(0x1b,0x24)|0x28);

    return 0;
}
コード例 #13
0
ファイル: bat_bq27541.c プロジェクト: kleopatra999/uboot
/*
get battery status, contain capacity, voltage, status
struct battery *batt_status:
voltage_uV. battery voltage
capacity.   battery capacity
state_of_chrg: 0. no charger; 1. usb charging; 2. AC charging
*/
int get_power_bat_status(struct battery *batt_status)
{
    int i2c_buf[2];
    int read_buffer = 0;
    int temperature = 280;
    i2c_set_bus_num(0);
    i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_BQ27541_I2C_ADDR);
    i2c_set_bus_speed(CONFIG_SYS_I2C_SPEED);

    i2c_buf[0] = i2c_reg_read(CONFIG_BQ27541_I2C_ADDR,0x08);// BQ27x00_REG_VOLT
    i2c_buf[1] = i2c_reg_read(CONFIG_BQ27541_I2C_ADDR,0x09);// BQ27x00_REG_VOLT+1  
    read_buffer = (i2c_buf[1] << 8) | i2c_buf[0];
    batt_status->voltage_uV = read_buffer*1000;

    i2c_buf[0] = i2c_reg_read(CONFIG_BQ27541_I2C_ADDR,0x2c);// BQ27500_REG_SOC
    i2c_buf[1] = i2c_reg_read(CONFIG_BQ27541_I2C_ADDR,0x2d);// BQ27500_REG_SOC+1  

    read_buffer = (i2c_buf[1] << 8) | i2c_buf[0];

    if(read_buffer==0 && batt_status->voltage_uV>3400000)
    batt_status->capacity=1;
    else if(read_buffer>=2) batt_status->capacity = (read_buffer-2)*100/98;
    else batt_status->capacity = 0;

    i2c_buf[0] = i2c_reg_read(CONFIG_BQ27541_I2C_ADDR,0x06);// BQ27x00_REG_TEMP
    i2c_buf[1] = i2c_reg_read(CONFIG_BQ27541_I2C_ADDR,0x07);// BQ27x00_REG_TEMP+1  
   
    temperature = ((i2c_buf[1] << 8) | i2c_buf[0]) - TEMP_K;

    if(!state_of_chrg)state_of_chrg = dwc_otg_check_dpdm();

    if((temperature<MIN_CHARGE_TEMPERATURE)||(temperature>MAX_CHARGE_TEMPERATURE))   //over temperature
    {
        batt_status->state_of_chrg = 0;
        printf("%s, over temperature = %d, usb type=%d\n ",__func__, temperature, state_of_chrg);
    }
    else batt_status->state_of_chrg = state_of_chrg;
    
	return 0;
}
コード例 #14
0
ファイル: board.c プロジェクト: OpenNoah/u-boot
int board_late_init(void)
{
	const unsigned int toff = 1000;
	unsigned int cnt  = 3;
	unsigned short buf = 0xAAAA;
	unsigned char scratchreg = 0;
	unsigned int oldspeed;

	/* try to read out some boot-instruction from resetcontroller */
	oldspeed = i2c_get_bus_speed();
	if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
		i2c_read(RSTCTRL_ADDR, RSTCTRL_SCRATCHREG, 1,
			 &scratchreg, sizeof(scratchreg));
		i2c_set_bus_speed(oldspeed);
	} else {
		puts("ERROR: i2c_set_bus_speed failed! (scratchregister)\n");
	}

	if (gpio_get_value(ESC_KEY)) {
		do {
			lcd_position_cursor(1, 8);
			switch (cnt) {
			case 3:
				lcd_puts(
				"release ESC-KEY to enter SERVICE-mode.");
				break;
			case 2:
				lcd_puts(
				"release ESC-KEY to enter DIAGNOSE-mode.");
				break;
			case 1:
				lcd_puts(
				"release ESC-KEY to enter BOOT-mode.    ");
				break;
			}
			mdelay(toff);
			cnt--;
			if (!gpio_get_value(ESC_KEY) &&
			    gpio_get_value(PUSH_KEY) && 2 == cnt) {
				lcd_position_cursor(1, 8);
				lcd_puts(
				"switching to network-console ...       ");
				env_set("bootcmd", "run netconsole");
				cnt = 4;
				break;
			} else if (!gpio_get_value(ESC_KEY) &&
			    gpio_get_value(PUSH_KEY) && 1 == cnt) {
				lcd_position_cursor(1, 8);
				lcd_puts(
				"starting u-boot script from USB ...    ");
				env_set("bootcmd", "run usbscript");
				cnt = 4;
				break;
			} else if ((!gpio_get_value(ESC_KEY) &&
				    gpio_get_value(PUSH_KEY) && cnt == 0) ||
				    (gpio_get_value(ESC_KEY) &&
				    gpio_get_value(PUSH_KEY) && cnt == 0)) {
				lcd_position_cursor(1, 8);
				lcd_puts(
				"starting script from network ...      ");
				env_set("bootcmd", "run netscript");
				cnt = 4;
				break;
			} else if (!gpio_get_value(ESC_KEY)) {
				break;
			}
		} while (cnt);
	} else if (scratchreg == 0xCC) {
		lcd_position_cursor(1, 8);
		lcd_puts(
		"starting vxworks from network ...      ");
		env_set("bootcmd", "run netboot");
		cnt = 4;
	} else if (scratchreg == 0xCD) {
		lcd_position_cursor(1, 8);
		lcd_puts(
		"starting script from network ...      ");
		env_set("bootcmd", "run netscript");
		cnt = 4;
	} else if (scratchreg == 0xCE) {
		lcd_position_cursor(1, 8);
		lcd_puts(
		"starting AR from eMMC ...             ");
		env_set("bootcmd", "run mmcboot");
		cnt = 4;
	}

	lcd_position_cursor(1, 8);
	switch (cnt) {
	case 0:
		lcd_puts("entering BOOT-mode.                    ");
		env_set("bootcmd", "run defaultAR");
		buf = 0x0000;
		break;
	case 1:
		lcd_puts("entering DIAGNOSE-mode.                ");
		buf = 0x0F0F;
		break;
	case 2:
		lcd_puts("entering SERVICE mode.                 ");
		buf = 0xB4B4;
		break;
	case 3:
		lcd_puts("loading OS...                          ");
		buf = 0x0404;
		break;
	}
	/* write bootinfo into scratchregister of resetcontroller */
	oldspeed = i2c_get_bus_speed();
	if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
		i2c_write(RSTCTRL_ADDR, RSTCTRL_SCRATCHREG, 1,
			  (uint8_t *)&buf, sizeof(buf));
		i2c_set_bus_speed(oldspeed);
	} else {
		puts("ERROR: i2c_set_bus_speed failed! (scratchregister)\n");
	}
	/* setup othbootargs for bootvx-command (vxWorks bootline) */
	char othbootargs[128];
	snprintf(othbootargs, sizeof(othbootargs),
		 "u=vxWorksFTP pw=vxWorks o=0x%08x;0x%08x;0x%08x;0x%08x",
		 (unsigned int) gd->fb_base-0x20,
		 (u32)env_get_ulong("vx_memtop", 16, gd->fb_base-0x20),
		 (u32)env_get_ulong("vx_romfsbase", 16, 0),
		 (u32)env_get_ulong("vx_romfssize", 16, 0));
	env_set("othbootargs", othbootargs);
	/*
	 * reset VBAR registers to its reset location, VxWorks 6.9.3.2 does
	 * expect that vectors are there, original u-boot moves them to _start
	 */
	__asm__("ldr r0,=0x20000");
	__asm__("mcr p15, 0, r0, c12, c0, 0"); /* Set VBAR */

	return 0;
}
コード例 #15
0
ファイル: tegra_i2c.c プロジェクト: Analias/SNOWLeo-SDR-1
void i2c_init(int speed, int slaveaddr)
{
	/* This will override the speed selected in the fdt for that port */
	debug("i2c_init(speed=%u, slaveaddr=0x%x)\n", speed, slaveaddr);
	i2c_set_bus_speed(speed);
}