Lines Matching full:ci
3 * ddbridge-ci.c: Digital Devices bridge CI (DuoFlex, CI Bridge) support
12 #include "ddbridge-ci.h"
18 /* Octopus CI internal CI interface */
20 static int wait_ci_ready(struct ddb_ci *ci) in wait_ci_ready() argument
26 if (ddbreadl(ci->port->dev, in wait_ci_ready()
27 CI_CONTROL(ci->nr)) & CI_READY) in wait_ci_ready()
39 struct ddb_ci *ci = ca->data; in read_attribute_mem() local
44 ddbwritel(ci->port->dev, CI_READ_CMD | (1 << 16) | address, in read_attribute_mem()
45 CI_DO_READ_ATTRIBUTES(ci->nr)); in read_attribute_mem()
46 wait_ci_ready(ci); in read_attribute_mem()
47 val = 0xff & ddbreadl(ci->port->dev, CI_BUFFER(ci->nr) + off); in read_attribute_mem()
54 struct ddb_ci *ci = ca->data; in write_attribute_mem() local
56 ddbwritel(ci->port->dev, CI_WRITE_CMD | (value << 16) | address, in write_attribute_mem()
57 CI_DO_ATTRIBUTE_RW(ci->nr)); in write_attribute_mem()
58 wait_ci_ready(ci); in write_attribute_mem()
66 struct ddb_ci *ci = ca->data; in read_cam_control() local
69 ddbwritel(ci->port->dev, CI_READ_CMD | address, in read_cam_control()
70 CI_DO_IO_RW(ci->nr)); in read_cam_control()
73 res = ddbreadl(ci->port->dev, CI_READDATA(ci->nr)); in read_cam_control()
86 struct ddb_ci *ci = ca->data; in write_cam_control() local
88 ddbwritel(ci->port->dev, CI_WRITE_CMD | (value << 16) | address, in write_cam_control()
89 CI_DO_IO_RW(ci->nr)); in write_cam_control()
90 wait_ci_ready(ci); in write_cam_control()
96 struct ddb_ci *ci = ca->data; in slot_reset() local
98 ddbwritel(ci->port->dev, CI_POWER_ON, in slot_reset()
99 CI_CONTROL(ci->nr)); in slot_reset()
101 ddbwritel(ci->port->dev, CI_POWER_ON | CI_RESET_CAM, in slot_reset()
102 CI_CONTROL(ci->nr)); in slot_reset()
103 ddbwritel(ci->port->dev, CI_ENABLE | CI_POWER_ON | CI_RESET_CAM, in slot_reset()
104 CI_CONTROL(ci->nr)); in slot_reset()
106 ddbwritel(ci->port->dev, CI_ENABLE | CI_POWER_ON, in slot_reset()
107 CI_CONTROL(ci->nr)); in slot_reset()
113 struct ddb_ci *ci = ca->data; in slot_shutdown() local
115 ddbwritel(ci->port->dev, 0, CI_CONTROL(ci->nr)); in slot_shutdown()
122 struct ddb_ci *ci = ca->data; in slot_ts_enable() local
123 u32 val = ddbreadl(ci->port->dev, CI_CONTROL(ci->nr)); in slot_ts_enable()
125 ddbwritel(ci->port->dev, val | CI_BYPASS_DISABLE, in slot_ts_enable()
126 CI_CONTROL(ci->nr)); in slot_ts_enable()
132 struct ddb_ci *ci = ca->data; in poll_slot_status() local
133 u32 val = ddbreadl(ci->port->dev, CI_CONTROL(ci->nr)); in poll_slot_status()
156 struct ddb_ci *ci; in ci_attach() local
158 ci = kzalloc(sizeof(*ci), GFP_KERNEL); in ci_attach()
159 if (!ci) in ci_attach()
161 memcpy(&ci->en, &en_templ, sizeof(en_templ)); in ci_attach()
162 ci->en.data = ci; in ci_attach()
163 port->en = &ci->en; in ci_attach()
165 ci->port = port; in ci_attach()
166 ci->nr = port->nr - 2; in ci_attach()
169 /* DuoFlex Dual CI support */
171 static int write_creg(struct ddb_ci *ci, u8 data, u8 mask) in write_creg() argument
173 struct i2c_adapter *i2c = &ci->port->i2c->adap; in write_creg()
174 u8 adr = (ci->port->type == DDB_CI_EXTERNAL_XO2) ? 0x12 : 0x13; in write_creg()
176 ci->port->creg = (ci->port->creg & ~mask) | data; in write_creg()
177 return i2c_write_reg(i2c, adr, 0x02, ci->port->creg); in write_creg()
183 struct ddb_ci *ci = ca->data; in read_attribute_mem_xo2() local
184 struct i2c_adapter *i2c = &ci->port->i2c->adap; in read_attribute_mem_xo2()
185 u8 adr = (ci->port->type == DDB_CI_EXTERNAL_XO2) ? 0x12 : 0x13; in read_attribute_mem_xo2()
196 struct ddb_ci *ci = ca->data; in write_attribute_mem_xo2() local
197 struct i2c_adapter *i2c = &ci->port->i2c->adap; in write_attribute_mem_xo2()
198 u8 adr = (ci->port->type == DDB_CI_EXTERNAL_XO2) ? 0x12 : 0x13; in write_attribute_mem_xo2()
206 struct ddb_ci *ci = ca->data; in read_cam_control_xo2() local
207 struct i2c_adapter *i2c = &ci->port->i2c->adap; in read_cam_control_xo2()
208 u8 adr = (ci->port->type == DDB_CI_EXTERNAL_XO2) ? 0x12 : 0x13; in read_cam_control_xo2()
219 struct ddb_ci *ci = ca->data; in write_cam_control_xo2() local
220 struct i2c_adapter *i2c = &ci->port->i2c->adap; in write_cam_control_xo2()
221 u8 adr = (ci->port->type == DDB_CI_EXTERNAL_XO2) ? 0x12 : 0x13; in write_cam_control_xo2()
228 struct ddb_ci *ci = ca->data; in slot_reset_xo2() local
230 dev_dbg(ci->port->dev->dev, "%s\n", __func__); in slot_reset_xo2()
231 write_creg(ci, 0x01, 0x01); in slot_reset_xo2()
232 write_creg(ci, 0x04, 0x04); in slot_reset_xo2()
234 write_creg(ci, 0x02, 0x02); in slot_reset_xo2()
235 write_creg(ci, 0x00, 0x04); in slot_reset_xo2()
236 write_creg(ci, 0x18, 0x18); in slot_reset_xo2()
242 struct ddb_ci *ci = ca->data; in slot_shutdown_xo2() local
244 dev_dbg(ci->port->dev->dev, "%s\n", __func__); in slot_shutdown_xo2()
245 write_creg(ci, 0x10, 0xff); in slot_shutdown_xo2()
246 write_creg(ci, 0x08, 0x08); in slot_shutdown_xo2()
252 struct ddb_ci *ci = ca->data; in slot_ts_enable_xo2() local
254 dev_dbg(ci->port->dev->dev, "%s\n", __func__); in slot_ts_enable_xo2()
255 write_creg(ci, 0x00, 0x10); in slot_ts_enable_xo2()
261 struct ddb_ci *ci = ca->data; in poll_slot_status_xo2() local
262 struct i2c_adapter *i2c = &ci->port->i2c->adap; in poll_slot_status_xo2()
263 u8 adr = (ci->port->type == DDB_CI_EXTERNAL_XO2) ? 0x12 : 0x13; in poll_slot_status_xo2()
289 struct ddb_ci *ci; in ci_xo2_attach() local
291 ci = kzalloc(sizeof(*ci), GFP_KERNEL); in ci_xo2_attach()
292 if (!ci) in ci_xo2_attach()
294 memcpy(&ci->en, &en_xo2_templ, sizeof(en_xo2_templ)); in ci_xo2_attach()
295 ci->en.data = ci; in ci_xo2_attach()
296 port->en = &ci->en; in ci_xo2_attach()
298 ci->port = port; in ci_xo2_attach()
299 ci->nr = port->nr - 2; in ci_xo2_attach()
300 ci->port->creg = 0; in ci_xo2_attach()
301 write_creg(ci, 0x10, 0xff); in ci_xo2_attach()
302 write_creg(ci, 0x08, 0x08); in ci_xo2_attach()