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()
62 pci_dbg(privdata->pci_dev, "id: %d\n", i2c_common->bus_id); in amd_mp2_bus_enable_set()
66 i2c_cmd_base.s.bus_id = i2c_common->bus_id; in amd_mp2_bus_enable_set()
67 i2c_cmd_base.s.i2c_speed = i2c_common->i2c_speed; in amd_mp2_bus_enable_set()
69 amd_mp2_c2p_mutex_lock(i2c_common); in amd_mp2_bus_enable_set()
71 return amd_mp2_cmd(i2c_common, i2c_cmd_base); in amd_mp2_bus_enable_set()
75 static void amd_mp2_cmd_rw_fill(struct amd_i2c_common *i2c_common, in amd_mp2_cmd_rw_fill() argument
80 i2c_cmd_base->s.bus_id = i2c_common->bus_id; in amd_mp2_cmd_rw_fill()
81 i2c_cmd_base->s.i2c_speed = i2c_common->i2c_speed; in amd_mp2_cmd_rw_fill()
82 i2c_cmd_base->s.slave_addr = i2c_common->msg->addr; in amd_mp2_cmd_rw_fill()
83 i2c_cmd_base->s.length = i2c_common->msg->len; in amd_mp2_cmd_rw_fill()
86 int amd_mp2_rw(struct amd_i2c_common *i2c_common, enum i2c_cmd reqcmd) in amd_mp2_rw() argument
88 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_rw()
91 amd_mp2_cmd_rw_fill(i2c_common, &i2c_cmd_base, reqcmd); in amd_mp2_rw()
92 amd_mp2_c2p_mutex_lock(i2c_common); in amd_mp2_rw()
94 if (i2c_common->msg->len <= 32) { in amd_mp2_rw()
98 i2c_common->msg->buf, in amd_mp2_rw()
99 i2c_common->msg->len); in amd_mp2_rw()
102 writeq((u64)i2c_common->dma_addr, in amd_mp2_rw()
106 return amd_mp2_cmd(i2c_common, i2c_cmd_base); in amd_mp2_rw()
110 static void amd_mp2_pci_check_rw_event(struct amd_i2c_common *i2c_common) in amd_mp2_pci_check_rw_event() argument
112 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()
120 len, i2c_common->msg->len); in amd_mp2_pci_check_rw_event()
124 if (unlikely(slave_addr != i2c_common->msg->addr)) { in amd_mp2_pci_check_rw_event()
126 slave_addr, i2c_common->msg->addr); in amd_mp2_pci_check_rw_event()
131 i2c_common->cmd_success = true; in amd_mp2_pci_check_rw_event()
134 static void __amd_mp2_process_event(struct amd_i2c_common *i2c_common) in __amd_mp2_process_event() argument
136 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in __amd_mp2_process_event()
138 enum status_type sts = i2c_common->eventval.r.status; in __amd_mp2_process_event()
139 enum response_type res = i2c_common->eventval.r.response; in __amd_mp2_process_event()
140 int len = i2c_common->eventval.r.length; in __amd_mp2_process_event()
148 switch (i2c_common->reqcmd) { in __amd_mp2_process_event()
151 amd_mp2_pci_check_rw_event(i2c_common); in __amd_mp2_process_event()
153 memcpy_fromio(i2c_common->msg->buf, in __amd_mp2_process_event()
162 amd_mp2_pci_check_rw_event(i2c_common); in __amd_mp2_process_event()
168 i2c_common->cmd_success = true; in __amd_mp2_process_event()
174 i2c_common->cmd_success = true; in __amd_mp2_process_event()
183 void amd_mp2_process_event(struct amd_i2c_common *i2c_common) in amd_mp2_process_event() argument
185 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_process_event()
188 if (unlikely(i2c_common->reqcmd == i2c_none)) { in amd_mp2_process_event()
190 i2c_common->bus_id); in amd_mp2_process_event()
194 __amd_mp2_process_event(i2c_common); in amd_mp2_process_event()
196 i2c_common->reqcmd = i2c_none; in amd_mp2_process_event()
197 amd_mp2_c2p_mutex_unlock(i2c_common); in amd_mp2_process_event()
205 struct amd_i2c_common *i2c_common; in amd_mp2_irq_isr() local
212 i2c_common = privdata->busses[bus_id]; in amd_mp2_irq_isr()
213 if (!i2c_common) in amd_mp2_irq_isr()
222 i2c_common->eventval.ul = val; in amd_mp2_irq_isr()
223 i2c_common->cmd_completion(i2c_common); in amd_mp2_irq_isr()
241 void amd_mp2_rw_timeout(struct amd_i2c_common *i2c_common) in amd_mp2_rw_timeout() argument
243 i2c_common->reqcmd = i2c_none; in amd_mp2_rw_timeout()
244 amd_mp2_c2p_mutex_unlock(i2c_common); in amd_mp2_rw_timeout()
248 int amd_mp2_register_cb(struct amd_i2c_common *i2c_common) in amd_mp2_register_cb() argument
250 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_register_cb()
253 if (i2c_common->bus_id > 1) in amd_mp2_register_cb()
256 if (privdata->busses[i2c_common->bus_id]) { in amd_mp2_register_cb()
257 pci_err(pdev, "Bus %d already taken!\n", i2c_common->bus_id); in amd_mp2_register_cb()
261 privdata->busses[i2c_common->bus_id] = i2c_common; in amd_mp2_register_cb()
267 int amd_mp2_unregister_cb(struct amd_i2c_common *i2c_common) in amd_mp2_unregister_cb() argument
269 struct amd_mp2_dev *privdata = i2c_common->mp2_dev; in amd_mp2_unregister_cb()
271 privdata->busses[i2c_common->bus_id] = NULL; in amd_mp2_unregister_cb()
381 struct amd_i2c_common *i2c_common; in amd_mp2_pci_suspend() local
386 i2c_common = privdata->busses[bus_id]; in amd_mp2_pci_suspend()
387 if (i2c_common) in amd_mp2_pci_suspend()
388 i2c_common->suspend(i2c_common); in amd_mp2_pci_suspend()
405 struct amd_i2c_common *i2c_common; in amd_mp2_pci_resume() local
417 i2c_common = privdata->busses[bus_id]; in amd_mp2_pci_resume()
418 if (i2c_common) { in amd_mp2_pci_resume()
419 ret = i2c_common->resume(i2c_common); in amd_mp2_pci_resume()