/* program and recalibrate demod PLL */
ret = regmap_write(dev->regmap, 0x05, 0x40); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x11, 0x08); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x15, reg15); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x16, reg16); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x1D, reg1D); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x1E, reg1E); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x1F, reg1F); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x17, 0xc1); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x17, 0x81); if (ret) goto err;
usleep_range(5000, 50000);
ret = regmap_write(dev->regmap, 0x05, 0x00); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x11, reg11); if (ret) goto err;
usleep_range(5000, 50000);
err: if (ret)
dev_dbg(&dev->client->dev, "failed=%d\n", ret); return ret;
}
ret = regmap_write(dev->regmap, 0x36, (refDiv - 8)); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x31, 0x00); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x2c, 0x02); if (ret) goto err;
reg27 = (((ulNDiv1 >> 8) & 0x0F) + ucLomod1) & 0x7F;
ret = regmap_write(dev->regmap, 0x27, reg27); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x28, (u8)(ulNDiv1 & 0xFF)); if (ret) goto err;
reg29 = (((ulNDiv2 >> 8) & 0x0F) + ucLomod2) & 0x7f;
ret = regmap_write(dev->regmap, 0x29, reg29); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x2a, (u8)(ulNDiv2 & 0xFF)); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x2F, 0xf5); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x30, 0x05); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x08, 0x1f); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x08, 0x3f); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x09, 0x20); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x09, 0x00); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x3e, 0x11); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x08, 0x2f); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x08, 0x3f); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x09, 0x10); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x09, 0x00); if (ret) goto err;
usleep_range(2000, 50000);
ret = regmap_read(dev->regmap, 0x42, &utmp); if (ret) goto err;
reg42 = utmp;
ret = regmap_write(dev->regmap, 0x3e, 0x10); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x08, 0x2f); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x08, 0x3f); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x09, 0x10); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x09, 0x00); if (ret) goto err;
usleep_range(2000, 50000);
ret = regmap_read(dev->regmap, 0x42, &utmp); if (ret) goto err;
reg42buf = utmp; if (reg42buf < reg42) {
ret = regmap_write(dev->regmap, 0x3e, 0x11); if (ret) goto err;
}
usleep_range(5000, 50000);
ret = regmap_read(dev->regmap, 0x2d, &utmp); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x2d, utmp); if (ret) goto err;
ret = regmap_read(dev->regmap, 0x2e, &utmp); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x2e, utmp); if (ret) goto err;
dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) {
ret = -ENOMEM;
dev_err(&client->dev, "kzalloc() failed\n"); goto err;
}
memcpy(&dev->cfg, cfg, sizeof(struct m88rs6000t_config));
dev->client = client;
dev->regmap = devm_regmap_init_i2c(client, ®map_config); if (IS_ERR(dev->regmap)) {
ret = PTR_ERR(dev->regmap); goto err;
}
ret = regmap_update_bits(dev->regmap, 0x11, 0x08, 0x08); if (ret) goto err;
usleep_range(5000, 50000);
ret = regmap_update_bits(dev->regmap, 0x10, 0x01, 0x01); if (ret) goto err;
usleep_range(10000, 50000);
ret = regmap_write(dev->regmap, 0x07, 0x7d); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x04, 0x01); if (ret) goto err;
/* check tuner chip id */
ret = regmap_read(dev->regmap, 0x01, &utmp); if (ret) goto err;
dev_info(&dev->client->dev, "chip_id=%02x\n", utmp); if (utmp != 0x64) {
ret = -ENODEV; goto err;
}
/* tuner init. */
ret = regmap_write(dev->regmap, 0x05, 0x40); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x11, 0x08); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x15, 0x6c); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x17, 0xc1); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x17, 0x81); if (ret) goto err;
usleep_range(10000, 50000);
ret = regmap_write(dev->regmap, 0x05, 0x00); if (ret) goto err;
ret = regmap_write(dev->regmap, 0x11, 0x0a); if (ret) goto err;
for (i = 0; i < ARRAY_SIZE(reg_vals); i++) {
ret = regmap_write(dev->regmap,
reg_vals[i].reg, reg_vals[i].val); if (ret) goto err;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.