1*f0e53aadSHeikki Krogerus /* SPDX-License-Identifier: MIT */ 2*f0e53aadSHeikki Krogerus #ifndef _XE_I2C_H_ 3*f0e53aadSHeikki Krogerus #define _XE_I2C_H_ 4*f0e53aadSHeikki Krogerus 5*f0e53aadSHeikki Krogerus #include <linux/bits.h> 6*f0e53aadSHeikki Krogerus #include <linux/notifier.h> 7*f0e53aadSHeikki Krogerus #include <linux/types.h> 8*f0e53aadSHeikki Krogerus #include <linux/workqueue.h> 9*f0e53aadSHeikki Krogerus 10*f0e53aadSHeikki Krogerus struct device; 11*f0e53aadSHeikki Krogerus struct fwnode_handle; 12*f0e53aadSHeikki Krogerus struct i2c_adapter; 13*f0e53aadSHeikki Krogerus struct i2c_client; 14*f0e53aadSHeikki Krogerus struct irq_domain; 15*f0e53aadSHeikki Krogerus struct platform_device; 16*f0e53aadSHeikki Krogerus struct xe_device; 17*f0e53aadSHeikki Krogerus struct xe_mmio; 18*f0e53aadSHeikki Krogerus 19*f0e53aadSHeikki Krogerus #define XE_I2C_MAX_CLIENTS 3 20*f0e53aadSHeikki Krogerus 21*f0e53aadSHeikki Krogerus #define XE_I2C_EP_COOKIE_DEVICE 0xde 22*f0e53aadSHeikki Krogerus 23*f0e53aadSHeikki Krogerus /* Endpoint Capabilities */ 24*f0e53aadSHeikki Krogerus #define XE_I2C_EP_CAP_IRQ BIT(0) 25*f0e53aadSHeikki Krogerus 26*f0e53aadSHeikki Krogerus struct xe_i2c_endpoint { 27*f0e53aadSHeikki Krogerus u8 cookie; 28*f0e53aadSHeikki Krogerus u8 capabilities; 29*f0e53aadSHeikki Krogerus u16 addr[XE_I2C_MAX_CLIENTS]; 30*f0e53aadSHeikki Krogerus }; 31*f0e53aadSHeikki Krogerus 32*f0e53aadSHeikki Krogerus struct xe_i2c { 33*f0e53aadSHeikki Krogerus struct fwnode_handle *adapter_node; 34*f0e53aadSHeikki Krogerus struct platform_device *pdev; 35*f0e53aadSHeikki Krogerus struct i2c_adapter *adapter; 36*f0e53aadSHeikki Krogerus struct i2c_client *client[XE_I2C_MAX_CLIENTS]; 37*f0e53aadSHeikki Krogerus 38*f0e53aadSHeikki Krogerus struct notifier_block bus_notifier; 39*f0e53aadSHeikki Krogerus struct work_struct work; 40*f0e53aadSHeikki Krogerus 41*f0e53aadSHeikki Krogerus struct irq_domain *irqdomain; 42*f0e53aadSHeikki Krogerus int adapter_irq; 43*f0e53aadSHeikki Krogerus 44*f0e53aadSHeikki Krogerus struct xe_i2c_endpoint ep; 45*f0e53aadSHeikki Krogerus struct device *drm_dev; 46*f0e53aadSHeikki Krogerus 47*f0e53aadSHeikki Krogerus struct xe_mmio *mmio; 48*f0e53aadSHeikki Krogerus }; 49*f0e53aadSHeikki Krogerus 50*f0e53aadSHeikki Krogerus #if IS_ENABLED(CONFIG_I2C) 51*f0e53aadSHeikki Krogerus int xe_i2c_probe(struct xe_device *xe); 52*f0e53aadSHeikki Krogerus void xe_i2c_irq_handler(struct xe_device *xe, u32 master_ctl); 53*f0e53aadSHeikki Krogerus #else 54*f0e53aadSHeikki Krogerus static inline int xe_i2c_probe(struct xe_device *xe) { return 0; } 55*f0e53aadSHeikki Krogerus static inline void xe_i2c_irq_handler(struct xe_device *xe, u32 master_ctl) { } 56*f0e53aadSHeikki Krogerus #endif 57*f0e53aadSHeikki Krogerus 58*f0e53aadSHeikki Krogerus #endif 59