190a38d999739f35f4fc925c875e6ee518546b66cGeert Uytterhoeven/* 22896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * da9055 declarations for DA9055 PMICs. 32896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * 42896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * Copyright(c) 2012 Dialog Semiconductor Ltd. 52896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * 62896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * Author: David Dajun Chen <dchen@diasemi.com> 72896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * 82896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * This program is free software; you can redistribute it and/or modify 92896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * it under the terms of the GNU General Public License as published by 102896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * the Free Software Foundation; either version 2 of the License, or 112896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * (at your option) any later version. 122896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * 132896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * This program is distributed in the hope that it will be useful, 142896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * but WITHOUT ANY WARRANTY; without even the implied warranty of 152896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 162896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * GNU General Public License for more details. 172896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * 182896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * You should have received a copy of the GNU General Public License 192896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * along with this program; if not, write to the Free Software 202896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 212896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * 222896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam */ 232896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 242896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#ifndef __DA9055_CORE_H 252896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#define __DA9055_CORE_H 262896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 272896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#include <linux/interrupt.h> 282896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#include <linux/regmap.h> 292896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 302896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam/* 312896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam * PMIC IRQ 322896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam */ 332896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#define DA9055_IRQ_ALARM 0x01 342896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#define DA9055_IRQ_TICK 0x02 352896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#define DA9055_IRQ_NONKEY 0x00 362896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#define DA9055_IRQ_REGULATOR 0x0B 372896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#define DA9055_IRQ_HWMON 0x03 382896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 392896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstruct da9055_pdata; 402896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 412896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstruct da9055 { 422896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam struct regmap *regmap; 432896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam struct regmap_irq_chip_data *irq_data; 442896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam struct device *dev; 452896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam struct i2c_client *i2c_client; 462896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 472896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam int irq_base; 482896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam int chip_irq; 492896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam}; 502896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 512896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam/* Device I/O */ 522896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstatic inline int da9055_reg_read(struct da9055 *da9055, unsigned char reg) 532896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam{ 542896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam int val, ret; 552896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 562896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam ret = regmap_read(da9055->regmap, reg, &val); 572896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam if (ret < 0) 582896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam return ret; 592896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 602896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam return val; 612896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam} 622896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 632896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstatic inline int da9055_reg_write(struct da9055 *da9055, unsigned char reg, 642896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam unsigned char val) 652896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam{ 662896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam return regmap_write(da9055->regmap, reg, val); 672896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam} 682896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 692896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstatic inline int da9055_group_read(struct da9055 *da9055, unsigned char reg, 702896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam unsigned reg_cnt, unsigned char *val) 712896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam{ 722896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam return regmap_bulk_read(da9055->regmap, reg, val, reg_cnt); 732896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam} 742896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 752896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstatic inline int da9055_group_write(struct da9055 *da9055, unsigned char reg, 762896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam unsigned reg_cnt, unsigned char *val) 772896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam{ 782896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam return regmap_raw_write(da9055->regmap, reg, val, reg_cnt); 792896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam} 802896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 812896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamstatic inline int da9055_reg_update(struct da9055 *da9055, unsigned char reg, 822896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam unsigned char bit_mask, 832896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam unsigned char reg_val) 842896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam{ 852896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam return regmap_update_bits(da9055->regmap, reg, bit_mask, reg_val); 862896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam} 872896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 882896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam/* Generic Device API */ 892896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamint da9055_device_init(struct da9055 *da9055); 902896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamvoid da9055_device_exit(struct da9055 *da9055); 912896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 922896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangamextern struct regmap_config da9055_regmap_config; 932896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam 942896434cf272acace1b7093d5e4ba8022ed11ac8Ashish Jangam#endif /* __DA9055_CORE_H */ 95