6db4831e98
Android 14
112 lines
4 KiB
C
112 lines
4 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2019 MediaTek Inc.
|
|
* Author: Argus Lin <argus.lin@mediatek.com>
|
|
*/
|
|
#ifndef __PMIF_H__
|
|
#define __PMIF_H__
|
|
|
|
#include <linux/clk.h>
|
|
|
|
enum {
|
|
SPMI_MASTER_0 = 0,
|
|
SPMI_MASTER_1,
|
|
SPMI_MASTER_2,
|
|
SPMI_MASTER_3
|
|
};
|
|
/**
|
|
* @base: pmif base address.
|
|
* @regs: pmif register offset table.
|
|
* @spmimst_base: spmi master base address.
|
|
* @spmimst_regs: spmi master register offset table.
|
|
* @infra_base: infra base address.
|
|
* @infra_regs: infra register offset table.
|
|
* @topckgen_base: topckgen base address.
|
|
* @topckgen_regs: topckgen register offset table.
|
|
* @toprgu_base: toprgu base address.
|
|
* @toprgu_regs: toprgu register offset table.
|
|
* @dbgregs: pmif debug register offset table.
|
|
* @dbgver: pmif debug version.
|
|
* @swinf_ch_start: indicate sw channel start number, lower is hw channel.
|
|
* @ap_swinf_no: indicate ap sw channel number.
|
|
* @write: indicate write cmd.
|
|
* @mstid: indicate mstid.
|
|
* @pmifid: indicate pmifid.
|
|
* @irq: indicate irq number.
|
|
* @grpid: indicates which group id we used.
|
|
* @lock: indicate lock key.
|
|
* @pmifThread_lock: indicate pmif interrupt thread pm protection.
|
|
* @pmif_mutex: indicate pmif interrupt thread mutex protection.
|
|
* @spmic: indicate spmi controller.
|
|
* @pmif_sys_ck: indicate pmif infracfg_ao sys_ck cg.
|
|
* @pmif_tmr_ck: indicate pmif infracfg_ao tmr_ck cg.
|
|
* @pmif_clk_mux: indicate pmif clock source, be as consumer.
|
|
* @pmif_clk_osc_d10: indicate pmif clock source to osc d10.
|
|
* @pmif_clk26m: indicate pmif clock source to clk26m.
|
|
* @spmimst_clk_mux: indicate spmimst clock source, be as consumer.
|
|
* @spmimst_clk26m: indicate spmimst clock sourc to clk26m.
|
|
* @spmimst_clk_osc_d10: indicate spmimst clock source to osc d10.
|
|
* @cmd: sends a non-data command sequence on the SPMI bus.
|
|
* @read_cmd: sends a register read command sequence on the SPMI bus.
|
|
* @write_cmd: sends a register write command sequence on the SPMI bus.
|
|
* @pmif_enable_clk_set: pmif clock set.
|
|
* @pmif_force_normal_mode: enable pmif normal mode.
|
|
* @pmif_enable_swinf: enable sw interface arbritation.
|
|
* @pmif_enable_cmdIssue: enable cmd enable to access.
|
|
* @pmif_enable: set pmif all done.
|
|
* @is_pmif_init_done: check if pmif init done.
|
|
* @pmif_enable_reset: SW reset pmif.
|
|
* @pmif_cali_clock: calibrate spmi master clock.
|
|
* @spmi_config_master: config spmi master.
|
|
*/
|
|
struct pmif {
|
|
void __iomem *base;
|
|
const u32 *regs;
|
|
void __iomem *spmimst_base;
|
|
const u32 *spmimst_regs;
|
|
void __iomem *infra_base;
|
|
const u32 *infra_regs;
|
|
void __iomem *topckgen_base;
|
|
const u32 *topckgen_regs;
|
|
void __iomem *toprgu_base;
|
|
const u32 *toprgu_regs;
|
|
const u32 *dbgregs;
|
|
u32 dbgver;
|
|
u32 swinf_ch_start;
|
|
u32 ap_swinf_no;
|
|
int write;
|
|
int mstid;
|
|
int pmifid;
|
|
int irq;
|
|
int grpid;
|
|
raw_spinlock_t lock;
|
|
struct wakeup_source *pmifThread_lock;
|
|
struct mutex pmif_mutex;
|
|
struct spmi_controller *spmic;
|
|
struct clk *pmif_sys_ck;
|
|
struct clk *pmif_tmr_ck;
|
|
struct clk *pmif_clk_mux;
|
|
struct clk *pmif_clk_osc_d10;
|
|
struct clk *pmif_clk26m;
|
|
struct clk *spmimst_clk_mux;
|
|
struct clk *spmimst_clk26m;
|
|
struct clk *spmimst_clk_osc_d10;
|
|
int (*cmd)(struct spmi_controller *ctrl, unsigned int opcode);
|
|
int (*read_cmd)(struct spmi_controller *ctrl, u8 opc, u8 sid,
|
|
u16 addr, u8 *buf, size_t len);
|
|
int (*write_cmd)(struct spmi_controller *ctrl, u8 opc, u8 sid,
|
|
u16 addr, const u8 *buf, size_t len);
|
|
void (*pmif_enable_clk_set)(struct pmif *arb);
|
|
void (*pmif_force_normal_mode)(struct pmif *arb);
|
|
void (*pmif_enable_swinf)(struct pmif *arb, unsigned int chan_no,
|
|
unsigned int swinf_no);
|
|
void (*pmif_enable_cmdIssue)(struct pmif *arb, bool en);
|
|
void (*pmif_enable)(struct pmif *arb);
|
|
int (*is_pmif_init_done)(struct pmif *arb);
|
|
void (*pmif_enable_reset)(struct pmif *arb);
|
|
int (*pmif_cali_clock)(struct pmif *arb);
|
|
int (*spmi_config_master)(struct pmif *arb, unsigned int mstid,
|
|
bool en);
|
|
};
|
|
#endif /*__PMIF_H__*/
|