Lines Matching refs:i2c_common
19 static void amd_mp2_c2p_mutex_lock(struct amd_i2c_common *i2c_common)
21 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
25 privdata->c2p_lock_busid = i2c_common->bus_id;
28 static void amd_mp2_c2p_mutex_unlock(struct amd_i2c_common *i2c_common)
30 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
32 if (unlikely(privdata->c2p_lock_busid != i2c_common->bus_id)) {
35 i2c_common->bus_id, privdata->c2p_lock_busid);
42 static int amd_mp2_cmd(struct amd_i2c_common *i2c_common,
45 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
48 i2c_common->reqcmd = i2c_cmd_base.s.i2c_cmd;
57 int amd_mp2_bus_enable_set(struct amd_i2c_common *i2c_common, bool enable)
59 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
62 pci_dbg(privdata->pci_dev, "id: %d\n", i2c_common->bus_id);
66 i2c_cmd_base.s.bus_id = i2c_common->bus_id;
67 i2c_cmd_base.s.i2c_speed = i2c_common->i2c_speed;
69 amd_mp2_c2p_mutex_lock(i2c_common);
71 return amd_mp2_cmd(i2c_common, i2c_cmd_base);
75 static void amd_mp2_cmd_rw_fill(struct amd_i2c_common *i2c_common,
80 i2c_cmd_base->s.bus_id = i2c_common->bus_id;
81 i2c_cmd_base->s.i2c_speed = i2c_common->i2c_speed;
82 i2c_cmd_base->s.slave_addr = i2c_common->msg->addr;
83 i2c_cmd_base->s.length = i2c_common->msg->len;
86 int amd_mp2_rw(struct amd_i2c_common *i2c_common, enum i2c_cmd reqcmd)
88 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
91 amd_mp2_cmd_rw_fill(i2c_common, &i2c_cmd_base, reqcmd);
92 amd_mp2_c2p_mutex_lock(i2c_common);
94 if (i2c_common->msg->len <= 32) {
98 i2c_common->msg->buf,
99 i2c_common->msg->len);
102 writeq((u64)i2c_common->dma_addr,
106 return amd_mp2_cmd(i2c_common, i2c_cmd_base);
110 static void amd_mp2_pci_check_rw_event(struct amd_i2c_common *i2c_common)
112 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
114 int len = i2c_common->eventval.r.length;
115 u32 slave_addr = i2c_common->eventval.r.slave_addr;
118 if (unlikely(len != i2c_common->msg->len)) {
120 len, i2c_common->msg->len);
124 if (unlikely(slave_addr != i2c_common->msg->addr)) {
126 slave_addr, i2c_common->msg->addr);
131 i2c_common->cmd_success = true;
134 static void __amd_mp2_process_event(struct amd_i2c_common *i2c_common)
136 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
138 enum status_type sts = i2c_common->eventval.r.status;
139 enum response_type res = i2c_common->eventval.r.response;
140 int len = i2c_common->eventval.r.length;
148 switch (i2c_common->reqcmd) {
151 amd_mp2_pci_check_rw_event(i2c_common);
153 memcpy_fromio(i2c_common->msg->buf,
162 amd_mp2_pci_check_rw_event(i2c_common);
168 i2c_common->cmd_success = true;
174 i2c_common->cmd_success = true;
183 void amd_mp2_process_event(struct amd_i2c_common *i2c_common)
185 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
188 if (unlikely(i2c_common->reqcmd == i2c_none)) {
190 i2c_common->bus_id);
194 __amd_mp2_process_event(i2c_common);
196 i2c_common->reqcmd = i2c_none;
197 amd_mp2_c2p_mutex_unlock(i2c_common);
205 struct amd_i2c_common *i2c_common;
212 i2c_common = privdata->busses[bus_id];
213 if (!i2c_common)
222 i2c_common->eventval.ul = val;
223 i2c_common->cmd_completion(i2c_common);
241 void amd_mp2_rw_timeout(struct amd_i2c_common *i2c_common)
243 i2c_common->reqcmd = i2c_none;
244 amd_mp2_c2p_mutex_unlock(i2c_common);
248 int amd_mp2_register_cb(struct amd_i2c_common *i2c_common)
250 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
253 if (i2c_common->bus_id > 1)
256 if (privdata->busses[i2c_common->bus_id]) {
257 pci_err(pdev, "Bus %d already taken!\n", i2c_common->bus_id);
261 privdata->busses[i2c_common->bus_id] = i2c_common;
267 int amd_mp2_unregister_cb(struct amd_i2c_common *i2c_common)
269 struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
271 privdata->busses[i2c_common->bus_id] = NULL;
390 struct amd_i2c_common *i2c_common;
395 i2c_common = privdata->busses[bus_id];
396 if (i2c_common)
397 i2c_common->suspend(i2c_common);
414 struct amd_i2c_common *i2c_common;
426 i2c_common = privdata->busses[bus_id];
427 if (i2c_common) {
428 ret = i2c_common->resume(i2c_common);