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