/* Maximum timeout to bail out state transition for module */ #define STATE_TRANS_MAX_COUNT 0xffff
staticvoid __iomem *domain_transition_base;
/** * struct clk_psc_data - PSC data * @control_base: Base address for a PSC control * @domain_base: Base address for a PSC domain * @domain_id: PSC domain id number
*/ struct clk_psc_data { void __iomem *control_base; void __iomem *domain_base;
u32 domain_id;
};
/** * struct clk_psc - PSC clock structure * @hw: clk_hw for the psc * @psc_data: PSC driver specific data * @lock: Spinlock used by the driver
*/ struct clk_psc { struct clk_hw hw; struct clk_psc_data *psc_data;
spinlock_t *lock;
};
mdctl = readl(control_base + MDCTL);
mdctl &= ~MDSTAT_STATE_MASK;
mdctl |= next_state; /* For disable, we always put the module in local reset */ if (next_state == PSC_STATE_DISABLE)
mdctl &= ~MDCTL_LRESET;
writel(mdctl, control_base + MDCTL);
/** * clk_register_psc - register psc clock * @dev: device that is registering this clock * @name: name of this clock * @parent_name: name of clock's parent * @psc_data: platform data to configure this clock * @lock: spinlock used by this clock
*/ staticstruct clk *clk_register_psc(struct device *dev, constchar *name, constchar *parent_name, struct clk_psc_data *psc_data,
spinlock_t *lock)
{ struct clk_init_data init; struct clk_psc *psc; struct clk *clk;
psc = kzalloc(sizeof(*psc), GFP_KERNEL); if (!psc) return ERR_PTR(-ENOMEM);
/* Domain transition registers at fixed address space of domain_id 0 */ if (!domain_transition_base && !data->domain_id)
domain_transition_base = data->domain_base;
of_property_read_string(node, "clock-output-names", &clk_name);
parent_name = of_clk_get_parent_name(node, 0); if (!parent_name) {
pr_err("%s: Parent clock not found\n", __func__); goto unmap_domain;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.