Home | History | Annotate | Download | only in i2c

Lines Matching defs:xc

81 xc3028_name(struct xc3028 *xc)
83 if (xc->type == XC3028L)
90 xc3028_firmware_name(struct xc3028 *xc)
92 if (xc->type == XC3028L)
99 xc3028_reset(struct xc3028 *xc)
103 if (xc->reset)
104 error = xc->reset(xc->reset_priv);
110 xc3028_get_basefw(struct xc3028 *xc)
115 for (i = 0; i < xc->nfw; i++) {
116 fw = &xc->fw[i];
125 xc3028_get_stdfw(struct xc3028 *xc)
130 for (i = 0; i < xc->nfw; i++) {
131 fw = &xc->fw[i];
140 xc3028_get_scode(struct xc3028 *xc)
145 for (i = 0; i < xc->nfw; i++) {
146 fw = &xc->fw[i];
158 xc3028_firmware_open(struct xc3028 *xc)
170 xc3028_firmware_name(xc), &fwh);
185 device_printf(xc->parent, "%s: loading firmware '%s/%s'\n",
186 xc3028_name(xc), XC3028_FIRMWARE_DRVNAME, xc3028_firmware_name(xc));
187 error = xc3028_firmware_parse(xc, fw, fwlen);
189 basefw = xc3028_get_basefw(xc);
190 stdfw = xc3028_get_stdfw(xc);
191 scode = xc3028_get_scode(xc);
193 xc3028_reset(xc);
194 xc3028_dump_fw(xc, basefw, "base");
195 error = xc3028_firmware_upload(xc, basefw);
198 xc3028_dump_fw(xc, stdfw, "std");
199 error = xc3028_firmware_upload(xc, stdfw);
203 xc3028_dump_fw(xc, scode, "scode");
204 error = xc3028_scode_upload(xc, scode);
212 xc3028_read_2(xc, XC3028_REG_VERSION, &xcversion);
214 device_printf(xc->parent, "%s: hw %d.%d, fw %d.%d\n",
215 xc3028_name(xc),
226 aprint_error_dev(xc->parent,
228 xc3028_name(xc), XC3028_FIRMWARE_DRVNAME,
229 xc3028_firmware_name(xc), error);
269 xc3028_dump_fw(struct xc3028 *xc, struct xc3028_fw *xcfw, const char *type)
273 device_printf(xc->parent, "%s: %s:", xc3028_name(xc), type);
290 xc3028_firmware_parse(struct xc3028 *xc, const uint8_t *fw, size_t fwlen)
311 aprint_debug_dev(xc->parent, "%s: fw type %s, ver %d.%d, %d images\n",
312 xc3028_name(xc), fwname, fwver >> 8, fwver & 0xff, narr);
314 xc->fw = kmem_zalloc(sizeof(*xc->fw) * narr, KM_SLEEP);
315 xc->nfw = narr;
317 for (index = 0; index < xc->nfw && p < endp; index++) {
318 xcfw = &xc->fw[index];
350 aprint_error_dev(xc->parent, "%s: fw image corrupt\n", xc3028_name(xc));
351 for (index = 0; index < xc->nfw; index++) {
352 if (xc->fw[index].data)
353 kmem_free(xc->fw[index].data, xc->fw[index].data_size);
355 kmem_free(xc->fw, sizeof(*xc->fw) * xc->nfw);
356 xc->nfw = 0;
362 xc3028_firmware_upload(struct xc3028 *xc, struct xc3028_fw *xcfw)
380 error = xc3028_reset(xc);
406 error = xc3028_write_buffer(xc, cmd, wrlen + 1);
419 xc3028_scode_upload(struct xc3028 *xc, struct xc3028_fw *xcfw)
427 error = xc3028_write_buffer(xc, scode_init, sizeof(scode_init));
430 error = xc3028_write_buffer(xc, xcfw->data, 12);
433 error = xc3028_write_buffer(xc, scode_fini, sizeof(scode_fini));
441 xc3028_read_2(struct xc3028 *xc, uint16_t reg, uint16_t *val)
448 error = iic_exec(xc->i2c, I2C_OP_WRITE, xc->i2c_addr,
453 error = iic_exec(xc->i2c, I2C_OP_READ, xc->i2c_addr,
464 xc3028_write_buffer(struct xc3028 *xc, const uint8_t *data, size_t datalen)
466 return iic_exec(xc->i2c, I2C_OP_WRITE_WITH_STOP, xc->i2c_addr,
472 xc3028_write_2(struct xc3028 *xc, uint16_t reg, uint16_t val)
481 return xc3028_write_buffer(xc, data, sizeof(data));
489 struct xc3028 *xc;
491 xc = kmem_alloc(sizeof(*xc), KM_SLEEP);
492 xc->parent = parent;
493 xc->i2c = i2c;
494 xc->i2c_addr = addr;
495 xc->reset = reset;
496 xc->reset_priv = reset_priv;
497 xc->type = type;
499 if (xc3028_firmware_open(xc)) {
501 xc3028_name(xc));
505 return xc;
508 kmem_free(xc, sizeof(*xc));
513 xc3028_close(struct xc3028 *xc)
517 if (xc->fw) {
518 for (index = 0; index < xc->nfw; index++) {
519 if (xc->fw[index].data)
520 kmem_free(xc->fw[index].data,
521 xc->fw[index].data_size);
523 kmem_free(xc->fw, sizeof(*xc->fw) * xc->nfw);
525 kmem_free(xc, sizeof(*xc));
529 xc3028_tune_dtv(struct xc3028 *xc, const struct dvb_frontend_parameters *params)
544 error = xc3028_write_buffer(xc, freq_init, sizeof(freq_init));
553 error = xc3028_write_buffer(xc, freq_buf, sizeof(freq_buf));