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