blob: 890bbf14348e5b525e3e642a781a080bd49dd9e2 [file] [log] [blame]
/*
* p9015_charger.h
* Samsung P9015 Charger Header
*
* Copyright (C) 2014 Samsung Electronics, Inc.
* Yeongmi Ha <yeongmi86.ha@samsung.com>
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __BQ51221_CHARGER_H
#define __BQ51221_CHARGER_H __FILE__
#include <linux/mfd/core.h>
#include <linux/regulator/machine.h>
#include <linux/i2c.h>
#include <linux/battery/sec_charging_common.h>
#include <linux/wakelock.h>
/* REGISTER MAPS */
#define BQ51221_REG_CURRENT_REGISTER 0X01
#define BQ51221_REG_CURRENT_REGISTER2 0X02
#define BQ51221_REG_MAILBOX 0XE0
#define BQ51221_REG_POD_RAM 0XE1
#define BQ51221_REG_USER_HEADER 0XE2
#define BQ51221_REG_VRECT_STATUS 0XE3
#define BQ51221_REG_VOUT_STATUS 0XE4
#define BQ51221_REG_PWR_BYTE_STATUS 0XE8
#define BQ51221_REG_INDICATOR 0XEF
#define BQ51221_REG_PROP_PACKET_PAYLOAD 0XF1
/* WPC HEADER */
#define BQ51221_EPT_HEADER_EPT 0x02
#define BQ51221_EPT_HEADER_CS100 0x05
/* END POWER TRANSFER CODES IN WPC */
#define BQ51221_EPT_CODE_UNKOWN 0x00
#define BQ51221_EPT_CODE_CHARGE_COMPLETE 0x01
#define BQ51221_EPT_CODE_INTERNAL_FAULT 0x02
#define BQ51221_EPT_CODE_OVER_TEMPERATURE 0x03
#define BQ51221_EPT_CODE_OVER_VOLTAGE 0x04
#define BQ51221_EPT_CODE_OVER_CURRENT 0x05
#define BQ51221_EPT_CODE_BATTERY_FAILURE 0x06
#define BQ51221_EPT_CODE_RECONFIGURE 0x07
#define BQ51221_EPT_CODE_NO_RESPONSE 0x08
#define BQ51221_POWER_MODE_MASK (0x1 << 0)
#define BQ51221_SEND_USER_PKT_DONE_MASK (0x1 << 7)
#define BQ51221_SEND_USER_PKT_ERR_MASK (0x3 << 5)
#define BQ51221_SEND_ALIGN_MASK (0x1 << 3)
#define BQ51221_SEND_EPT_CC_MASK (0x1 << 0)
#define BQ51221_SEND_EOC_MASK (0x1 << 0)
#define BQ51221_CS100_VALUE 0x64
#define BQ51221_IOREG_100_VALUE 0x07
#define BQ51221_IOREG_90_VALUE 0x06
#define BQ51221_IOREG_60_VALUE 0x05
#define BQ51221_IOREG_50_VALUE 0x04
#define BQ51221_IOREG_40_VALUE 0x03
#define BQ51221_IOREG_30_VALUE 0x02
#define BQ51221_IOREG_20_VALUE 0x01
#define BQ51221_IOREG_10_VALUE 0x00
#define BQ51221_PTK_ERR_NO_ERR 0x00
#define BQ51221_PTK_ERR_ERR 0x01
#define BQ51221_PTK_ERR_ILLEGAL_HD 0x02
#define BQ51221_PTK_ERR_NO_DEF 0x03
enum {
END_POWER_TRANSFER_CODE_UNKOWN = 0,
END_POWER_TRANSFER_CODE_CHARGECOMPLETE,
END_POWER_TRANSFER_CODE_INTERNAL_FAULT,
END_POWER_TRANSFER_CODE_OVER_TEMPERATURE,
END_POWER_TRANSFER_CODE_OVER_VOLTAGE,
END_POWER_TRANSFER_CODE_OVER_CURRENT,
END_POWER_TRANSFER_CODE_BATTERY_FAILURE,
END_POWER_TRANSFER_CODE_RECONFIGURE,
END_POWER_TRANSFER_CODE_NO_RESPONSE,
};
struct bq51221_charger_platform_data {
int irq_gpio;
int irq_base;
int tsb_gpio;
int cs100_status;
int pad_mode;
int wireless_cc_cv;
int siop_level;
bool default_voreg;
char *wireless_charger_name;
};
#define bq51221_charger_platform_data_t \
struct bq51221_charger_platform_data
struct bq51221_charger_data {
struct i2c_client *client;
struct device *dev;
bq51221_charger_platform_data_t *pdata;
struct mutex io_lock;
struct power_supply psy_chg;
struct wake_lock wpc_wake_lock;
struct workqueue_struct *wqueue;
struct work_struct chgin_work;
struct delayed_work wpc_work;
struct delayed_work isr_work;
int chg_irq;
int irq_base;
int irq_gpio;
int wpc_state;
};
enum {
BQ51221_EVENT_IRQ = 0,
BQ51221_IRQS_NR,
};
enum {
BQ51221_PAD_MODE_NONE = 0,
BQ51221_PAD_MODE_WPC,
BQ51221_PAD_MODE_PMA,
};
#endif /* __BQ51221_CHARGER_H */