2019-05-01 15:08:22 +05:30
/* SPDX-License-Identifier: GPL-2.0 */
2017-12-07 20:57:09 +08:00
//
// Spreadtrum composite clock driver
//
// Copyright (C) 2017 Spreadtrum, Inc.
// Author: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
# ifndef _SPRD_COMPOSITE_H_
# define _SPRD_COMPOSITE_H_
# include "common.h"
# include "mux.h"
# include "div.h"
struct sprd_comp {
struct sprd_mux_ssel mux ;
struct sprd_div_internal div ;
struct sprd_clk_common common ;
} ;
2020-03-04 15:27:28 +08:00
# define SPRD_COMP_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, _table, \
_mshift , _mwidth , _dshift , _dwidth , \
_flags , _fn ) \
2017-12-07 20:57:09 +08:00
struct sprd_comp _struct = { \
. mux = _SPRD_MUX_CLK ( _mshift , _mwidth , _table ) , \
. div = _SPRD_DIV_CLK ( _dshift , _dwidth ) , \
. common = { \
. regmap = NULL , \
. reg = _reg , \
2020-03-04 15:27:28 +08:00
. hw . init = _fn ( _name , _parent , \
& sprd_comp_ops , _flags ) , \
2017-12-07 20:57:09 +08:00
} \
}
2020-03-04 15:27:28 +08:00
# define SPRD_COMP_CLK_TABLE(_struct, _name, _parent, _reg, _table, \
_mshift , _mwidth , _dshift , _dwidth , _flags ) \
SPRD_COMP_CLK_HW_INIT_FN ( _struct , _name , _parent , _reg , _table , \
_mshift , _mwidth , _dshift , _dwidth , \
_flags , CLK_HW_INIT_PARENTS )
# define SPRD_COMP_CLK(_struct, _name, _parent, _reg, _mshift, \
_mwidth , _dshift , _dwidth , _flags ) \
SPRD_COMP_CLK_TABLE ( _struct , _name , _parent , _reg , NULL , \
_mshift , _mwidth , _dshift , _dwidth , _flags )
# define SPRD_COMP_CLK_DATA_TABLE(_struct, _name, _parent, _reg, _table, \
_mshift , _mwidth , _dshift , \
_dwidth , _flags ) \
SPRD_COMP_CLK_HW_INIT_FN ( _struct , _name , _parent , _reg , _table , \
_mshift , _mwidth , _dshift , _dwidth , \
_flags , CLK_HW_INIT_PARENTS_DATA )
# define SPRD_COMP_CLK_DATA(_struct, _name, _parent, _reg, _mshift, \
_mwidth , _dshift , _dwidth , _flags ) \
SPRD_COMP_CLK_DATA_TABLE ( _struct , _name , _parent , _reg , NULL , \
_mshift , _mwidth , _dshift , _dwidth , \
_flags )
2017-12-07 20:57:09 +08:00
static inline struct sprd_comp * hw_to_sprd_comp ( const struct clk_hw * hw )
{
struct sprd_clk_common * common = hw_to_sprd_clk_common ( hw ) ;
return container_of ( common , struct sprd_comp , common ) ;
}
extern const struct clk_ops sprd_comp_ops ;
# endif /* _SPRD_COMPOSITE_H_ */