162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  Definitions for the SCOOP interface found on various Sharp PDAs
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (c) 2004 Richard Purdie
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#define SCOOP_MCR  0x00
962306a36Sopenharmony_ci#define SCOOP_CDR  0x04
1062306a36Sopenharmony_ci#define SCOOP_CSR  0x08
1162306a36Sopenharmony_ci#define SCOOP_CPR  0x0C
1262306a36Sopenharmony_ci#define SCOOP_CCR  0x10
1362306a36Sopenharmony_ci#define SCOOP_IRR  0x14
1462306a36Sopenharmony_ci#define SCOOP_IRM  0x14
1562306a36Sopenharmony_ci#define SCOOP_IMR  0x18
1662306a36Sopenharmony_ci#define SCOOP_ISR  0x1C
1762306a36Sopenharmony_ci#define SCOOP_GPCR 0x20
1862306a36Sopenharmony_ci#define SCOOP_GPWR 0x24
1962306a36Sopenharmony_ci#define SCOOP_GPRR 0x28
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define SCOOP_CPR_OUT	(1 << 7)
2262306a36Sopenharmony_ci#define SCOOP_CPR_SD_3V	(1 << 2)
2362306a36Sopenharmony_ci#define SCOOP_CPR_CF_XV	(1 << 1)
2462306a36Sopenharmony_ci#define SCOOP_CPR_CF_3V	(1 << 0)
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define SCOOP_GPCR_PA22	(1 << 12)
2762306a36Sopenharmony_ci#define SCOOP_GPCR_PA21	(1 << 11)
2862306a36Sopenharmony_ci#define SCOOP_GPCR_PA20	(1 << 10)
2962306a36Sopenharmony_ci#define SCOOP_GPCR_PA19	(1 << 9)
3062306a36Sopenharmony_ci#define SCOOP_GPCR_PA18	(1 << 8)
3162306a36Sopenharmony_ci#define SCOOP_GPCR_PA17	(1 << 7)
3262306a36Sopenharmony_ci#define SCOOP_GPCR_PA16	(1 << 6)
3362306a36Sopenharmony_ci#define SCOOP_GPCR_PA15	(1 << 5)
3462306a36Sopenharmony_ci#define SCOOP_GPCR_PA14	(1 << 4)
3562306a36Sopenharmony_ci#define SCOOP_GPCR_PA13	(1 << 3)
3662306a36Sopenharmony_ci#define SCOOP_GPCR_PA12	(1 << 2)
3762306a36Sopenharmony_ci#define SCOOP_GPCR_PA11	(1 << 1)
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cistruct scoop_config {
4062306a36Sopenharmony_ci	unsigned short io_out;
4162306a36Sopenharmony_ci	unsigned short io_dir;
4262306a36Sopenharmony_ci	unsigned short suspend_clr;
4362306a36Sopenharmony_ci	unsigned short suspend_set;
4462306a36Sopenharmony_ci	int gpio_base;
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci/* Structure for linking scoop devices to PCMCIA sockets */
4862306a36Sopenharmony_cistruct scoop_pcmcia_dev {
4962306a36Sopenharmony_ci	struct device *dev;     /* Pointer to this socket's scoop device */
5062306a36Sopenharmony_ci	int	irq;                /* irq for socket */
5162306a36Sopenharmony_ci	int cd_irq;
5262306a36Sopenharmony_ci	const char *cd_irq_str;
5362306a36Sopenharmony_ci	unsigned char keep_vs;
5462306a36Sopenharmony_ci	unsigned char keep_rd;
5562306a36Sopenharmony_ci};
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_cistruct scoop_pcmcia_config {
5862306a36Sopenharmony_ci	struct scoop_pcmcia_dev *devs;
5962306a36Sopenharmony_ci	int num_devs;
6062306a36Sopenharmony_ci	void (*power_ctrl)(struct device *scoop, unsigned short cpr, int nr);
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciextern struct scoop_pcmcia_config *platform_scoop_config;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_civoid reset_scoop(struct device *dev);
6662306a36Sopenharmony_ciunsigned short read_scoop_reg(struct device *dev, unsigned short reg);
6762306a36Sopenharmony_civoid write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data);
68