xref: /linux/drivers/gpu/drm/xe/xe_i2c.h (revision f0e53aadd702c64b2c2090996751c9be043f9e80)
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