android_kernel_samsung_on5x.../drivers/misc/gnss_if/pmu-gnss.h
2018-06-19 23:16:04 +02:00

110 lines
3.4 KiB
C

/*
* Copyright (c) 2015 Samsung Electronics Co., Ltd.
* http://www.samsung.com/
*
* EXYNOS - PMU(Power Management Unit) support
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __EXYNOS_PMU_GNSS_H
#define __EXYNOS_PMU_GNSS_H __FILE__
#include "gnss_prj.h"
/* BLK_ALIVE: GNSS related SFRs */
#define EXYNOS_PMU_GNSS_CTRL_NS 0x0040
#define EXYNOS_PMU_GNSS_CTRL_S 0x0044
#define EXYNOS_PMU_GNSS_STAT 0x0048
#define EXYNOS_PMU_GNSS_DEBUG 0x004C
#define EXYNOS_PMU_GNSS2AP_MEM_CONFIG 0x0090
#if !defined(CONFIG_SOC_EXYNOS7870) && !defined(CONFIG_SOC_EXYNOS7880)
#define EXYNOS_PMU_GNSS2AP_MEM_CONFIG1 0x00A4
#define EXYNOS_PMU_GNSS2AP_MEM_CONFIG2 0x00BC
#define EXYNOS_PMU_GNSS2AP_MEM_CONFIG3 0x00C4
#endif
#define EXYNOS_PMU_GNSS2AP_MIF0_PERI_ACCESS_CON 0x0094
#define EXYNOS_PMU_GNSS2AP_MIF1_PERI_ACCESS_CON 0x0098
#if !defined(CONFIG_SOC_EXYNOS7870)
#define EXYNOS_PMU_GNSS2AP_MIF2_PERI_ACCESS_CON 0x009C
#define EXYNOS_PMU_GNSS2AP_MIF3_PERI_ACCESS_CON 0x00A0
#endif
#define EXYNOS_PMU_GNSS_BOOT_TEST_RST_CONFIG 0x00A8
#define EXYNOS_PMU_GNSS2AP_PERI_ACCESS_WIN 0x00AC
#define EXYNOS_PMU_GNSS_MODAPIF_CONFIG 0x00B0
#define EXYNOS_PMU_GNSS_QOS 0x00B8
#define EXYNOS_PMU_CENTRAL_SEQ_GNSS_CONFIGURATION 0x02C0
#define EXYNOS_PMU_RESET_AHEAD_GNSS_SYS_PWR_REG 0x1174
#define EXYNOS_PMU_CLEANY_BUS_SYS_PWR_REG 0x11E8
#define EXYNOS_PMU_LOGIC_RESET_GNSS_SYS_PWR_REG 0x11EC
#define EXYNOS_PMU_TCXO_GATE_GNSS_SYS_PWR_REG 0x11C4
#define EXYNOS_PMU_RESET_ASB_GNSS_SYS_PWR_REG 0x11C8
/* GNSS PMU */
/* For EXYNOS_PMU_GNSS_CTRL Register */
#define GNSS_PWRON BIT(1)
#define GNSS_RESET_SET BIT(2)
#define GNSS_START BIT(3)
#define GNSS_ACTIVE_REQ_EN BIT(5)
#define GNSS_ACTIVE_REQ_CLR BIT(6)
#define GNSS_RESET_REQ_EN BIT(7)
#define GNSS_RESET_REQ_CLR BIT(8)
#define MASK_GNSS_PWRDN_DONE BIT(9)
#define RTC_OUT_EN BIT(10)
#define MASK_SLEEP_START_REQ BIT(12)
#define SET_SW_SLEEP_START_REQ BIT(13)
#define GNSS_WAKEUP_REQ_EN BIT(14)
#define GNSS_WAKEUP_REQ_CLR BIT(15)
#define CLEANY_BYPASS_END BIT(16)
#define TCXO_26M_40M_SEL BIT(17)
#if !defined(CONFIG_SOC_EXYNOS7870) && !defined(CONFIG_SOC_EXYNOS7880)
#define MEMSIZE_SHIFT 12
#define MEMSIZE_OFFSET 0
#define MEMSIZE_MASK 0xfffff
#define MEMBASE_ADDR_SHIFT 12
#define MEMBASE_ADDR_OFFSET 0
#define MEMBASE_ADDR_MASK 0xffffff
#else
#define MEMSIZE_SHIFT 22
#define MEMSIZE_OFFSET 16
#define MEMSIZE_MASK 0x1ff
#define MEMBASE_ADDR_SHIFT 22
#define MEMBASE_ADDR_OFFSET 0
#define MEMBASE_ADDR_MASK 0x3fff
#endif
#define SMC_ID 0x82000700
#define READ_CTRL 0x3
#define WRITE_CTRL 0x4
enum gnss_mode {
GNSS_POWER_OFF,
GNSS_POWER_ON,
GNSS_RESET,
NUM_GNSS_MODE,
};
enum gnss_int_clear {
GNSS_INT_WDT_RESET_CLEAR,
GNSS_INT_ACTIVE_CLEAR,
GNSS_INT_WAKEUP_CLEAR,
};
enum gnss_tcxo_mode {
TCXO_SHARED_MODE = 0,
TCXO_NON_SHARED_MODE = 1,
};
struct gnss_ctl;
extern int gnss_pmu_init_conf(struct gnss_ctl *);
extern int gnss_pmu_hold_reset(struct gnss_ctl *);
extern int gnss_pmu_release_reset(struct gnss_ctl *);
extern int gnss_pmu_power_on(struct gnss_ctl *, enum gnss_mode mode);
extern int gnss_pmu_clear_interrupt(struct gnss_ctl *,
enum gnss_int_clear);
extern int gnss_change_tcxo_mode(struct gnss_ctl *, enum gnss_tcxo_mode);
#endif /* __EXYNOS_PMU_GNSS_H */