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