2015-08-06 16:07:42 +05:30
/*
* Copyright ( c ) 2015 , The Linux Foundation . All rights reserved .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation .
*
* 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 __QCOM_GDSC_H__
# define __QCOM_GDSC_H__
# include <linux/err.h>
# include <linux/pm_domain.h>
struct regmap ;
2015-08-06 16:07:45 +05:30
struct reset_controller_dev ;
2015-08-06 16:07:42 +05:30
2015-08-06 16:07:44 +05:30
/* Powerdomain allowable state bitfields */
# define PWRSTS_OFF BIT(0)
# define PWRSTS_RET BIT(1)
# define PWRSTS_ON BIT(2)
# define PWRSTS_OFF_ON (PWRSTS_OFF | PWRSTS_ON)
# define PWRSTS_RET_ON (PWRSTS_RET | PWRSTS_ON)
2015-08-06 16:07:42 +05:30
/**
* struct gdsc - Globally Distributed Switch Controller
* @ pd : generic power domain
* @ regmap : regmap for MMIO accesses
* @ gdscr : gsdc control register
2015-08-06 16:07:44 +05:30
* @ cxcs : offsets of branch registers to toggle mem / periph bits in
* @ cxc_count : number of @ cxcs
* @ pwrsts : Possible powerdomain power states
2015-08-06 16:07:45 +05:30
* @ resets : ids of resets associated with this gdsc
* @ reset_count : number of @ resets
* @ rcdev : reset controller
2015-08-06 16:07:42 +05:30
*/
struct gdsc {
struct generic_pm_domain pd ;
2015-12-01 21:42:11 +05:30
struct generic_pm_domain * parent ;
2015-08-06 16:07:42 +05:30
struct regmap * regmap ;
unsigned int gdscr ;
2015-08-06 16:07:44 +05:30
unsigned int * cxcs ;
unsigned int cxc_count ;
const u8 pwrsts ;
2015-08-06 16:07:45 +05:30
struct reset_controller_dev * rcdev ;
unsigned int * resets ;
unsigned int reset_count ;
2015-08-06 16:07:42 +05:30
} ;
2015-12-01 21:42:11 +05:30
struct gdsc_desc {
struct device * dev ;
struct gdsc * * scs ;
size_t num ;
} ;
2015-08-06 16:07:42 +05:30
# ifdef CONFIG_QCOM_GDSC
2015-12-01 21:42:11 +05:30
int gdsc_register ( struct gdsc_desc * desc , struct reset_controller_dev * ,
struct regmap * ) ;
void gdsc_unregister ( struct gdsc_desc * desc ) ;
2015-08-06 16:07:42 +05:30
# else
2015-12-01 21:42:11 +05:30
static inline int gdsc_register ( struct gdsc_desc * desc ,
2015-08-06 16:07:45 +05:30
struct reset_controller_dev * rcdev ,
2015-08-06 16:07:42 +05:30
struct regmap * r )
{
return - ENOSYS ;
}
2015-12-01 21:42:11 +05:30
static inline void gdsc_unregister ( struct gdsc_desc * desc ) { } ;
2015-08-06 16:07:42 +05:30
# endif /* CONFIG_QCOM_GDSC */
# endif /* __QCOM_GDSC_H__ */