1294a97daSŁukasz Majewski /* 2294a97daSŁukasz Majewski * Copyright (C) 2012 Samsung Electronics 3294a97daSŁukasz Majewski * Lukasz Majewski <l.majewski@samsung.com> 4294a97daSŁukasz Majewski * 5*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6294a97daSŁukasz Majewski */ 7294a97daSŁukasz Majewski 8294a97daSŁukasz Majewski #include <common.h> 9294a97daSŁukasz Majewski #include <power/pmic.h> 10294a97daSŁukasz Majewski #include <power/power_chrg.h> 11294a97daSŁukasz Majewski #include <power/max8997_muic.h> 12294a97daSŁukasz Majewski #include <i2c.h> 13294a97daSŁukasz Majewski #include <errno.h> 14294a97daSŁukasz Majewski power_chrg_get_type(struct pmic * p)15294a97daSŁukasz Majewskistatic int power_chrg_get_type(struct pmic *p) 16294a97daSŁukasz Majewski { 17294a97daSŁukasz Majewski unsigned int val; 18294a97daSŁukasz Majewski unsigned char charge_type, charger; 19294a97daSŁukasz Majewski 20294a97daSŁukasz Majewski if (pmic_probe(p)) 21294a97daSŁukasz Majewski return CHARGER_NO; 22294a97daSŁukasz Majewski 23294a97daSŁukasz Majewski pmic_reg_read(p, MAX8997_MUIC_STATUS2, &val); 24294a97daSŁukasz Majewski charge_type = val & MAX8997_MUIC_CHG_MASK; 25294a97daSŁukasz Majewski 26294a97daSŁukasz Majewski switch (charge_type) { 27294a97daSŁukasz Majewski case MAX8997_MUIC_CHG_NO: 28294a97daSŁukasz Majewski charger = CHARGER_NO; 29294a97daSŁukasz Majewski break; 30294a97daSŁukasz Majewski case MAX8997_MUIC_CHG_USB: 31294a97daSŁukasz Majewski case MAX8997_MUIC_CHG_USB_D: 32294a97daSŁukasz Majewski charger = CHARGER_USB; 33294a97daSŁukasz Majewski break; 34294a97daSŁukasz Majewski case MAX8997_MUIC_CHG_TA: 35294a97daSŁukasz Majewski case MAX8997_MUIC_CHG_TA_1A: 36294a97daSŁukasz Majewski charger = CHARGER_TA; 37294a97daSŁukasz Majewski break; 38294a97daSŁukasz Majewski case MAX8997_MUIC_CHG_TA_500: 39294a97daSŁukasz Majewski charger = CHARGER_TA_500; 40294a97daSŁukasz Majewski break; 41294a97daSŁukasz Majewski default: 42294a97daSŁukasz Majewski charger = CHARGER_UNKNOWN; 43294a97daSŁukasz Majewski break; 44294a97daSŁukasz Majewski } 45294a97daSŁukasz Majewski 46294a97daSŁukasz Majewski return charger; 47294a97daSŁukasz Majewski } 48294a97daSŁukasz Majewski 49294a97daSŁukasz Majewski static struct power_chrg power_chrg_muic_ops = { 50294a97daSŁukasz Majewski .chrg_type = power_chrg_get_type, 51294a97daSŁukasz Majewski }; 52294a97daSŁukasz Majewski power_muic_init(unsigned int bus)53294a97daSŁukasz Majewskiint power_muic_init(unsigned int bus) 54294a97daSŁukasz Majewski { 55294a97daSŁukasz Majewski static const char name[] = "MAX8997_MUIC"; 56294a97daSŁukasz Majewski struct pmic *p = pmic_alloc(); 57294a97daSŁukasz Majewski 58294a97daSŁukasz Majewski if (!p) { 59294a97daSŁukasz Majewski printf("%s: POWER allocation error!\n", __func__); 60294a97daSŁukasz Majewski return -ENOMEM; 61294a97daSŁukasz Majewski } 62294a97daSŁukasz Majewski 63294a97daSŁukasz Majewski debug("Board Micro USB Interface Controller init\n"); 64294a97daSŁukasz Majewski 65294a97daSŁukasz Majewski p->name = name; 66294a97daSŁukasz Majewski p->interface = PMIC_I2C; 67294a97daSŁukasz Majewski p->number_of_regs = MUIC_NUM_OF_REGS; 68294a97daSŁukasz Majewski p->hw.i2c.addr = MAX8997_MUIC_I2C_ADDR; 69294a97daSŁukasz Majewski p->hw.i2c.tx_num = 1; 70294a97daSŁukasz Majewski p->bus = bus; 71294a97daSŁukasz Majewski 72294a97daSŁukasz Majewski p->chrg = &power_chrg_muic_ops; 73294a97daSŁukasz Majewski return 0; 74294a97daSŁukasz Majewski } 75