/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Kontron PLD driver definitions
*
* Copyright ( c ) 2010 - 2012 Kontron Europe GmbH
* Author : Michael Brunner < michael . brunner @ kontron . com >
*/
#ifndef _LINUX_MFD_KEMPLD_H_
#define _LINUX_MFD_KEMPLD_H_
/* kempld register definitions */
#define KEMPLD_IOINDEX 0 xa80
#define KEMPLD_IODATA 0 xa81
#define KEMPLD_MUTEX_KEY 0 x80
#define KEMPLD_VERSION 0 x00
#define KEMPLD_VERSION_LSB 0 x00
#define KEMPLD_VERSION_MSB 0 x01
#define KEMPLD_VERSION_GET_MINOR(x) (x & 0 x1f)
#define KEMPLD_VERSION_GET_MAJOR(x) ((x >> 5 ) & 0 x1f)
#define KEMPLD_VERSION_GET_NUMBER(x) ((x >> 10 ) & 0 xf)
#define KEMPLD_VERSION_GET_TYPE(x) ((x >> 14 ) & 0 x3)
#define KEMPLD_BUILDNR 0 x02
#define KEMPLD_BUILDNR_LSB 0 x02
#define KEMPLD_BUILDNR_MSB 0 x03
#define KEMPLD_FEATURE 0 x04
#define KEMPLD_FEATURE_LSB 0 x04
#define KEMPLD_FEATURE_MSB 0 x05
#define KEMPLD_FEATURE_BIT_I2C (1 << 0 )
#define KEMPLD_FEATURE_BIT_WATCHDOG (1 << 1 )
#define KEMPLD_FEATURE_BIT_GPIO (1 << 2 )
#define KEMPLD_FEATURE_MASK_UART (7 << 3 )
#define KEMPLD_FEATURE_BIT_NMI (1 << 8 )
#define KEMPLD_FEATURE_BIT_SMI (1 << 9 )
#define KEMPLD_FEATURE_BIT_SCI (1 << 10 )
#define KEMPLD_SPEC 0 x06
#define KEMPLD_SPEC_GET_MINOR(x) (x & 0 x0f)
#define KEMPLD_SPEC_GET_MAJOR(x) ((x >> 4 ) & 0 x0f)
#define KEMPLD_IRQ_GPIO 0 x35
#define KEMPLD_IRQ_I2C 0 x36
#define KEMPLD_CFG 0 x37
#define KEMPLD_CFG_GPIO_I2C_MUX (1 << 0 )
#define KEMPLD_CFG_BIOS_WP (1 << 7 )
#define KEMPLD_CLK 33333333
#define KEMPLD_TYPE_RELEASE 0 x0
#define KEMPLD_TYPE_DEBUG 0 x1
#define KEMPLD_TYPE_CUSTOM 0 x2
#define KEMPLD_VERSION_LEN 10
/**
* struct kempld_info - PLD device information structure
* @ major : PLD major revision
* @ minor : PLD minor revision
* @ buildnr : PLD build number
* @ number : PLD board specific index
* @ type : PLD type
* @ spec_major : PLD FW specification major revision
* @ spec_minor : PLD FW specification minor revision
* @ version : PLD version string
*/
struct kempld_info {
unsigned int major;
unsigned int minor;
unsigned int buildnr;
unsigned int number;
unsigned int type;
unsigned int spec_major;
unsigned int spec_minor;
char version[KEMPLD_VERSION_LEN];
};
/**
* struct kempld_device_data - Internal representation of the PLD device
* @ io_base : Pointer to the IO memory
* @ io_index : Pointer to the IO index register
* @ io_data : Pointer to the IO data register
* @ pld_clock : PLD clock frequency
* @ feature_mask : PLD feature mask
* @ dev : Pointer to kernel device structure
* @ info : KEMPLD info structure
* @ lock : PLD mutex
*/
struct kempld_device_data {
void __iomem *io_base;
void __iomem *io_index;
void __iomem *io_data;
u32 pld_clock;
u32 feature_mask;
struct device *dev;
struct kempld_info info;
struct mutex lock;
};
/**
* struct kempld_platform_data - PLD hardware configuration structure
* @ pld_clock : PLD clock frequency
* @ gpio_base GPIO base pin number
* @ ioresource : IO addresses of the PLD
* @ get_mutex : PLD specific get_mutex callback
* @ release_mutex : PLD specific release_mutex callback
* @ get_info : PLD specific get_info callback
* @ register_cells : PLD specific register_cells callback
*/
struct kempld_platform_data {
u32 pld_clock;
int gpio_base;
struct resource *ioresource;
void (*get_hardware_mutex) (struct kempld_device_data *);
void (*release_hardware_mutex) (struct kempld_device_data *);
int (*get_info) (struct kempld_device_data *);
int (*register_cells) (struct kempld_device_data *);
};
extern void kempld_get_mutex(struct kempld_device_data *pld);
extern void kempld_release_mutex(struct kempld_device_data *pld);
extern u8 kempld_read8(struct kempld_device_data *pld, u8 index);
extern void kempld_write8(struct kempld_device_data *pld, u8 index, u8 data);
extern u16 kempld_read16(struct kempld_device_data *pld, u8 index);
extern void kempld_write16(struct kempld_device_data *pld, u8 index, u16 data);
extern u32 kempld_read32(struct kempld_device_data *pld, u8 index);
extern void kempld_write32(struct kempld_device_data *pld, u8 index, u32 data);
#endif /* _LINUX_MFD_KEMPLD_H_ */
Messung V0.5 in Prozent C=95 H=100 G=97
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland