Lines Matching refs:i2c_common

19 static void amd_mp2_c2p_mutex_lock(struct amd_i2c_common *i2c_common)  in amd_mp2_c2p_mutex_lock()  argument
21 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_c2p_mutex_lock()
25 privdata->c2p_lock_busid = i2c_common->bus_id; in amd_mp2_c2p_mutex_lock()
28 static void amd_mp2_c2p_mutex_unlock(struct amd_i2c_common *i2c_common) in amd_mp2_c2p_mutex_unlock() argument
30 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_c2p_mutex_unlock()
32 if (unlikely(privdata->c2p_lock_busid != i2c_common->bus_id)) { in amd_mp2_c2p_mutex_unlock()
35 i2c_common->bus_id, privdata->c2p_lock_busid); in amd_mp2_c2p_mutex_unlock()
42 static int amd_mp2_cmd(struct amd_i2c_common *i2c_common, in amd_mp2_cmd() argument
45 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_cmd()
48 i2c_common->reqcmd = i2c_cmd_base.s.i2c_cmd; in amd_mp2_cmd()
57 int amd_mp2_bus_enable_set(struct amd_i2c_common *i2c_common, bool enable) in amd_mp2_bus_enable_set() argument
59 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_bus_enable_set()
63 i2c_common->bus_id); in amd_mp2_bus_enable_set()
67 i2c_cmd_base.s.bus_id = i2c_common->bus_id; in amd_mp2_bus_enable_set()
68 i2c_cmd_base.s.i2c_speed = i2c_common->i2c_speed; in amd_mp2_bus_enable_set()
70 amd_mp2_c2p_mutex_lock(i2c_common); in amd_mp2_bus_enable_set()
72 return amd_mp2_cmd(i2c_common, i2c_cmd_base); in amd_mp2_bus_enable_set()
76 static void amd_mp2_cmd_rw_fill(struct amd_i2c_common *i2c_common, in amd_mp2_cmd_rw_fill() argument
81 i2c_cmd_base->s.bus_id = i2c_common->bus_id; in amd_mp2_cmd_rw_fill()
82 i2c_cmd_base->s.i2c_speed = i2c_common->i2c_speed; in amd_mp2_cmd_rw_fill()
83 i2c_cmd_base->s.slave_addr = i2c_common->msg->addr; in amd_mp2_cmd_rw_fill()
84 i2c_cmd_base->s.length = i2c_common->msg->len; in amd_mp2_cmd_rw_fill()
87 int amd_mp2_rw(struct amd_i2c_common *i2c_common, enum i2c_cmd reqcmd) in amd_mp2_rw() argument
89 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_rw()
92 amd_mp2_cmd_rw_fill(i2c_common, &i2c_cmd_base, reqcmd); in amd_mp2_rw()
93 amd_mp2_c2p_mutex_lock(i2c_common); in amd_mp2_rw()
95 if (i2c_common->msg->len <= 32) { in amd_mp2_rw()
99 i2c_common->msg->buf, in amd_mp2_rw()
100 i2c_common->msg->len); in amd_mp2_rw()
103 writeq((u64)i2c_common->dma_addr, in amd_mp2_rw()
107 return amd_mp2_cmd(i2c_common, i2c_cmd_base); in amd_mp2_rw()
111 static void amd_mp2_pci_check_rw_event(struct amd_i2c_common *i2c_common) in amd_mp2_pci_check_rw_event() argument
113 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_pci_check_rw_event()
114 int len = i2c_common->eventval.r.length; in amd_mp2_pci_check_rw_event()
115 u32 slave_addr = i2c_common->eventval.r.slave_addr; in amd_mp2_pci_check_rw_event()
118 if (unlikely(len != i2c_common->msg->len)) { in amd_mp2_pci_check_rw_event()
121 len, i2c_common->msg->len); in amd_mp2_pci_check_rw_event()
125 if (unlikely(slave_addr != i2c_common->msg->addr)) { in amd_mp2_pci_check_rw_event()
128 slave_addr, i2c_common->msg->addr); in amd_mp2_pci_check_rw_event()
133 i2c_common->cmd_success = true; in amd_mp2_pci_check_rw_event()
136 static void __amd_mp2_process_event(struct amd_i2c_common *i2c_common) in __amd_mp2_process_event() argument
138 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in __amd_mp2_process_event()
139 enum status_type sts = i2c_common->eventval.r.status; in __amd_mp2_process_event()
140 enum response_type res = i2c_common->eventval.r.response; in __amd_mp2_process_event()
141 int len = i2c_common->eventval.r.length; in __amd_mp2_process_event()
149 switch (i2c_common->reqcmd) { in __amd_mp2_process_event()
152 amd_mp2_pci_check_rw_event(i2c_common); in __amd_mp2_process_event()
154 memcpy_fromio(i2c_common->msg->buf, in __amd_mp2_process_event()
164 amd_mp2_pci_check_rw_event(i2c_common); in __amd_mp2_process_event()
171 i2c_common->cmd_success = true; in __amd_mp2_process_event()
179 i2c_common->cmd_success = true; in __amd_mp2_process_event()
190 void amd_mp2_process_event(struct amd_i2c_common *i2c_common) in amd_mp2_process_event() argument
192 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_process_event()
194 if (unlikely(i2c_common->reqcmd == i2c_none)) { in amd_mp2_process_event()
197 i2c_common->bus_id); in amd_mp2_process_event()
201 __amd_mp2_process_event(i2c_common); in amd_mp2_process_event()
203 i2c_common->reqcmd = i2c_none; in amd_mp2_process_event()
204 amd_mp2_c2p_mutex_unlock(i2c_common); in amd_mp2_process_event()
211 struct amd_i2c_common *i2c_common; in amd_mp2_irq_isr() local
218 i2c_common = privdata->busses[bus_id]; in amd_mp2_irq_isr()
219 if (!i2c_common) in amd_mp2_irq_isr()
228 i2c_common->eventval.ul = val; in amd_mp2_irq_isr()
229 i2c_common->cmd_completion(i2c_common); in amd_mp2_irq_isr()
248 void amd_mp2_rw_timeout(struct amd_i2c_common *i2c_common) in amd_mp2_rw_timeout() argument
250 i2c_common->reqcmd = i2c_none; in amd_mp2_rw_timeout()
251 amd_mp2_c2p_mutex_unlock(i2c_common); in amd_mp2_rw_timeout()
255 int amd_mp2_register_cb(struct amd_i2c_common *i2c_common) in amd_mp2_register_cb() argument
257 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_register_cb()
259 if (i2c_common->bus_id > 1) in amd_mp2_register_cb()
262 if (privdata->busses[i2c_common->bus_id]) { in amd_mp2_register_cb()
264 "Bus %d already taken!\n", i2c_common->bus_id); in amd_mp2_register_cb()
268 privdata->busses[i2c_common->bus_id] = i2c_common; in amd_mp2_register_cb()
274 int amd_mp2_unregister_cb(struct amd_i2c_common *i2c_common) in amd_mp2_unregister_cb() argument
276 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_unregister_cb()
278 privdata->busses[i2c_common->bus_id] = NULL; in amd_mp2_unregister_cb()
388 struct amd_i2c_common *i2c_common; in amd_mp2_pci_suspend() local
393 i2c_common = privdata->busses[bus_id]; in amd_mp2_pci_suspend()
394 if (i2c_common) in amd_mp2_pci_suspend()
395 i2c_common->suspend(i2c_common); in amd_mp2_pci_suspend()
413 struct amd_i2c_common *i2c_common; in amd_mp2_pci_resume() local
426 i2c_common = privdata->busses[bus_id]; in amd_mp2_pci_resume()
427 if (i2c_common) { in amd_mp2_pci_resume()
428 ret = i2c_common->resume(i2c_common); in amd_mp2_pci_resume()