162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef BCM63XX_PCMCIA_H_
362306a36Sopenharmony_ci#define BCM63XX_PCMCIA_H_
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/types.h>
662306a36Sopenharmony_ci#include <linux/timer.h>
762306a36Sopenharmony_ci#include <pcmcia/ss.h>
862306a36Sopenharmony_ci#include <bcm63xx_dev_pcmcia.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/* socket polling rate in ms */
1162306a36Sopenharmony_ci#define BCM63XX_PCMCIA_POLL_RATE	500
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cienum {
1462306a36Sopenharmony_ci	CARD_CARDBUS = (1 << 0),
1562306a36Sopenharmony_ci	CARD_PCCARD = (1 << 1),
1662306a36Sopenharmony_ci	CARD_5V = (1 << 2),
1762306a36Sopenharmony_ci	CARD_3V = (1 << 3),
1862306a36Sopenharmony_ci	CARD_XV = (1 << 4),
1962306a36Sopenharmony_ci	CARD_YV = (1 << 5),
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct bcm63xx_pcmcia_socket {
2362306a36Sopenharmony_ci	struct pcmcia_socket socket;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	/* platform specific data */
2662306a36Sopenharmony_ci	struct bcm63xx_pcmcia_platform_data *pd;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	/* all regs access are protected by this spinlock */
2962306a36Sopenharmony_ci	spinlock_t lock;
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci	/* pcmcia registers resource */
3262306a36Sopenharmony_ci	struct resource *reg_res;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	/* base remapped address of registers */
3562306a36Sopenharmony_ci	void __iomem *base;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	/* whether a card is detected at the moment */
3862306a36Sopenharmony_ci	int card_detected;
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	/* type of detected card (mask of above enum) */
4162306a36Sopenharmony_ci	u8 card_type;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	/* keep last socket status to implement event reporting */
4462306a36Sopenharmony_ci	unsigned int old_status;
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci	/* backup of requested socket state */
4762306a36Sopenharmony_ci	socket_state_t requested_state;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	/* timer used for socket status polling */
5062306a36Sopenharmony_ci	struct timer_list timer;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	/* attribute/common memory resources */
5362306a36Sopenharmony_ci	struct resource *attr_res;
5462306a36Sopenharmony_ci	struct resource *common_res;
5562306a36Sopenharmony_ci	struct resource *io_res;
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	/* base address of io memory */
5862306a36Sopenharmony_ci	void __iomem *io_base;
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci#endif /* BCM63XX_PCMCIA_H_ */
62