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; }
/* * 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 }
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); }
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); }
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); }
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); }
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))); }
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; }
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; }
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; }
/* * 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); }
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; }
/* 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; }
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; }
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); }