162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * linux/drivers/pcmcia/soc_common.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2000 John G Dorsey <john+@cs.cmu.edu>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * This file contains definitions for the PCMCIA support code common to
862306a36Sopenharmony_ci * integrated SOCs like the SA-11x0 and PXA2xx microprocessors.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci#ifndef _ASM_ARCH_PCMCIA
1162306a36Sopenharmony_ci#define _ASM_ARCH_PCMCIA
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/* include the world */
1462306a36Sopenharmony_ci#include <linux/clk.h>
1562306a36Sopenharmony_ci#include <linux/cpufreq.h>
1662306a36Sopenharmony_ci#include <pcmcia/cistpl.h>
1762306a36Sopenharmony_ci#include <pcmcia/soc_common.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct device;
2062306a36Sopenharmony_cistruct gpio_desc;
2162306a36Sopenharmony_cistruct pcmcia_low_level;
2262306a36Sopenharmony_cistruct regulator;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct skt_dev_info {
2562306a36Sopenharmony_ci	int nskt;
2662306a36Sopenharmony_ci	struct soc_pcmcia_socket skt[];
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct soc_pcmcia_timing {
3062306a36Sopenharmony_ci	unsigned short io;
3162306a36Sopenharmony_ci	unsigned short mem;
3262306a36Sopenharmony_ci	unsigned short attr;
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciextern void soc_common_pcmcia_get_timing(struct soc_pcmcia_socket *, struct soc_pcmcia_timing *);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_civoid soc_pcmcia_init_one(struct soc_pcmcia_socket *skt,
3862306a36Sopenharmony_ci	const struct pcmcia_low_level *ops, struct device *dev);
3962306a36Sopenharmony_civoid soc_pcmcia_remove_one(struct soc_pcmcia_socket *skt);
4062306a36Sopenharmony_ciint soc_pcmcia_add_one(struct soc_pcmcia_socket *skt);
4162306a36Sopenharmony_ciint soc_pcmcia_request_gpiods(struct soc_pcmcia_socket *skt);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_civoid soc_common_cf_socket_state(struct soc_pcmcia_socket *skt,
4462306a36Sopenharmony_ci	struct pcmcia_state *state);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciint soc_pcmcia_regulator_set(struct soc_pcmcia_socket *skt,
4762306a36Sopenharmony_ci	struct soc_pcmcia_regulator *r, int v);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#ifdef CONFIG_PCMCIA_DEBUG
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciextern void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
5262306a36Sopenharmony_ci			     int lvl, const char *fmt, ...);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#define debug(skt, lvl, fmt, arg...) \
5562306a36Sopenharmony_ci	soc_pcmcia_debug(skt, __func__, lvl, fmt , ## arg)
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci#else
5862306a36Sopenharmony_ci#define debug(skt, lvl, fmt, arg...) do { } while (0)
5962306a36Sopenharmony_ci#endif
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci/*
6362306a36Sopenharmony_ci * The PC Card Standard, Release 7, section 4.13.4, says that twIORD
6462306a36Sopenharmony_ci * has a minimum value of 165ns. Section 4.13.5 says that twIOWR has
6562306a36Sopenharmony_ci * a minimum value of 165ns, as well. Section 4.7.2 (describing
6662306a36Sopenharmony_ci * common and attribute memory write timing) says that twWE has a
6762306a36Sopenharmony_ci * minimum value of 150ns for a 250ns cycle time (for 5V operation;
6862306a36Sopenharmony_ci * see section 4.7.4), or 300ns for a 600ns cycle time (for 3.3V
6962306a36Sopenharmony_ci * operation, also section 4.7.4). Section 4.7.3 says that taOE
7062306a36Sopenharmony_ci * has a maximum value of 150ns for a 300ns cycle time (for 5V
7162306a36Sopenharmony_ci * operation), or 300ns for a 600ns cycle time (for 3.3V operation).
7262306a36Sopenharmony_ci *
7362306a36Sopenharmony_ci * When configuring memory maps, Card Services appears to adopt the policy
7462306a36Sopenharmony_ci * that a memory access time of "0" means "use the default." The default
7562306a36Sopenharmony_ci * PCMCIA I/O command width time is 165ns. The default PCMCIA 5V attribute
7662306a36Sopenharmony_ci * and memory command width time is 150ns; the PCMCIA 3.3V attribute and
7762306a36Sopenharmony_ci * memory command width time is 300ns.
7862306a36Sopenharmony_ci */
7962306a36Sopenharmony_ci#define SOC_PCMCIA_IO_ACCESS		(165)
8062306a36Sopenharmony_ci#define SOC_PCMCIA_5V_MEM_ACCESS	(150)
8162306a36Sopenharmony_ci#define SOC_PCMCIA_3V_MEM_ACCESS	(300)
8262306a36Sopenharmony_ci#define SOC_PCMCIA_ATTR_MEM_ACCESS	(300)
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci/*
8562306a36Sopenharmony_ci * The socket driver actually works nicely in interrupt-driven form,
8662306a36Sopenharmony_ci * so the (relatively infrequent) polling is "just to be sure."
8762306a36Sopenharmony_ci */
8862306a36Sopenharmony_ci#define SOC_PCMCIA_POLL_PERIOD    (2*HZ)
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci/* I/O pins replacing memory pins
9262306a36Sopenharmony_ci * (PCMCIA System Architecture, 2nd ed., by Don Anderson, p.75)
9362306a36Sopenharmony_ci *
9462306a36Sopenharmony_ci * These signals change meaning when going from memory-only to
9562306a36Sopenharmony_ci * memory-or-I/O interface:
9662306a36Sopenharmony_ci */
9762306a36Sopenharmony_ci#define iostschg bvd1
9862306a36Sopenharmony_ci#define iospkr   bvd2
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci#endif
101