dvb_spi 234 drivers/media/spi/cxd2880-spi.c static int cxd2880_update_pid_filter(struct cxd2880_dvb_spi *dvb_spi, dvb_spi 240 drivers/media/spi/cxd2880-spi.c if (!dvb_spi || !cfg) { dvb_spi 245 drivers/media/spi/cxd2880-spi.c mutex_lock(&dvb_spi->spi_mutex); dvb_spi 254 drivers/media/spi/cxd2880-spi.c ret = cxd2880_set_pid_filter(dvb_spi->spi, &tmpcfg); dvb_spi 256 drivers/media/spi/cxd2880-spi.c ret = cxd2880_set_pid_filter(dvb_spi->spi, cfg); dvb_spi 258 drivers/media/spi/cxd2880-spi.c mutex_unlock(&dvb_spi->spi_mutex); dvb_spi 268 drivers/media/spi/cxd2880-spi.c struct cxd2880_dvb_spi *dvb_spi = NULL; dvb_spi 274 drivers/media/spi/cxd2880-spi.c dvb_spi = arg; dvb_spi 275 drivers/media/spi/cxd2880-spi.c if (!dvb_spi) { dvb_spi 280 drivers/media/spi/cxd2880-spi.c ret = cxd2880_spi_clear_ts_buffer(dvb_spi->spi); dvb_spi 288 drivers/media/spi/cxd2880-spi.c ret = cxd2880_spi_read_ts_buffer_info(dvb_spi->spi, dvb_spi 297 drivers/media/spi/cxd2880-spi.c cxd2880_spi_read_ts(dvb_spi->spi, dvb_spi 298 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf, dvb_spi 300 drivers/media/spi/cxd2880-spi.c dvb_dmx_swfilter(&dvb_spi->demux, dvb_spi 301 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf, dvb_spi 307 drivers/media/spi/cxd2880-spi.c cxd2880_spi_read_ts(dvb_spi->spi, dvb_spi 308 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf, dvb_spi 310 drivers/media/spi/cxd2880-spi.c dvb_dmx_swfilter(&dvb_spi->demux, dvb_spi 311 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf, dvb_spi 327 drivers/media/spi/cxd2880-spi.c struct cxd2880_dvb_spi *dvb_spi = NULL; dvb_spi 339 drivers/media/spi/cxd2880-spi.c dvb_spi = demux->priv; dvb_spi 341 drivers/media/spi/cxd2880-spi.c if (dvb_spi->feed_count == CXD2880_MAX_FILTER_SIZE) { dvb_spi 348 drivers/media/spi/cxd2880-spi.c if (dvb_spi->all_pid_feed_count == 0) { dvb_spi 349 drivers/media/spi/cxd2880-spi.c ret = cxd2880_update_pid_filter(dvb_spi, dvb_spi 350 drivers/media/spi/cxd2880-spi.c &dvb_spi->filter_config, dvb_spi 357 drivers/media/spi/cxd2880-spi.c dvb_spi->all_pid_feed_count++; dvb_spi 360 drivers/media/spi/cxd2880-spi.c dvb_spi->all_pid_feed_count); dvb_spi 364 drivers/media/spi/cxd2880-spi.c cfgtmp = dvb_spi->filter_config; dvb_spi 379 drivers/media/spi/cxd2880-spi.c if (!dvb_spi->all_pid_feed_count) dvb_spi 380 drivers/media/spi/cxd2880-spi.c ret = cxd2880_update_pid_filter(dvb_spi, dvb_spi 386 drivers/media/spi/cxd2880-spi.c dvb_spi->filter_config = cfgtmp; dvb_spi 389 drivers/media/spi/cxd2880-spi.c if (dvb_spi->feed_count == 0) { dvb_spi 390 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf = dvb_spi 393 drivers/media/spi/cxd2880-spi.c if (!dvb_spi->ts_buf) { dvb_spi 395 drivers/media/spi/cxd2880-spi.c memset(&dvb_spi->filter_config, 0, dvb_spi 396 drivers/media/spi/cxd2880-spi.c sizeof(dvb_spi->filter_config)); dvb_spi 397 drivers/media/spi/cxd2880-spi.c dvb_spi->all_pid_feed_count = 0; dvb_spi 400 drivers/media/spi/cxd2880-spi.c dvb_spi->cxd2880_ts_read_thread = kthread_run(cxd2880_ts_read, dvb_spi 401 drivers/media/spi/cxd2880-spi.c dvb_spi, dvb_spi 403 drivers/media/spi/cxd2880-spi.c if (IS_ERR(dvb_spi->cxd2880_ts_read_thread)) { dvb_spi 405 drivers/media/spi/cxd2880-spi.c kfree(dvb_spi->ts_buf); dvb_spi 406 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf = NULL; dvb_spi 407 drivers/media/spi/cxd2880-spi.c memset(&dvb_spi->filter_config, 0, dvb_spi 408 drivers/media/spi/cxd2880-spi.c sizeof(dvb_spi->filter_config)); dvb_spi 409 drivers/media/spi/cxd2880-spi.c dvb_spi->all_pid_feed_count = 0; dvb_spi 410 drivers/media/spi/cxd2880-spi.c return PTR_ERR(dvb_spi->cxd2880_ts_read_thread); dvb_spi 414 drivers/media/spi/cxd2880-spi.c dvb_spi->feed_count++; dvb_spi 416 drivers/media/spi/cxd2880-spi.c pr_debug("start feed (count %d)\n", dvb_spi->feed_count); dvb_spi 425 drivers/media/spi/cxd2880-spi.c struct cxd2880_dvb_spi *dvb_spi = NULL; dvb_spi 437 drivers/media/spi/cxd2880-spi.c dvb_spi = demux->priv; dvb_spi 439 drivers/media/spi/cxd2880-spi.c if (!dvb_spi->feed_count) { dvb_spi 450 drivers/media/spi/cxd2880-spi.c if (dvb_spi->all_pid_feed_count <= 0) { dvb_spi 454 drivers/media/spi/cxd2880-spi.c dvb_spi->all_pid_feed_count--; dvb_spi 458 drivers/media/spi/cxd2880-spi.c cfgtmp = dvb_spi->filter_config; dvb_spi 470 drivers/media/spi/cxd2880-spi.c dvb_spi->filter_config = cfgtmp; dvb_spi 478 drivers/media/spi/cxd2880-spi.c ret = cxd2880_update_pid_filter(dvb_spi, dvb_spi 479 drivers/media/spi/cxd2880-spi.c &dvb_spi->filter_config, dvb_spi 480 drivers/media/spi/cxd2880-spi.c dvb_spi->all_pid_feed_count > 0); dvb_spi 481 drivers/media/spi/cxd2880-spi.c dvb_spi->feed_count--; dvb_spi 483 drivers/media/spi/cxd2880-spi.c if (dvb_spi->feed_count == 0) { dvb_spi 486 drivers/media/spi/cxd2880-spi.c ret_stop = kthread_stop(dvb_spi->cxd2880_ts_read_thread); dvb_spi 491 drivers/media/spi/cxd2880-spi.c kfree(dvb_spi->ts_buf); dvb_spi 492 drivers/media/spi/cxd2880-spi.c dvb_spi->ts_buf = NULL; dvb_spi 495 drivers/media/spi/cxd2880-spi.c pr_debug("stop feed ok.(count %d)\n", dvb_spi->feed_count); dvb_spi 511 drivers/media/spi/cxd2880-spi.c struct cxd2880_dvb_spi *dvb_spi = NULL; dvb_spi 519 drivers/media/spi/cxd2880-spi.c dvb_spi = kzalloc(sizeof(struct cxd2880_dvb_spi), GFP_KERNEL); dvb_spi 520 drivers/media/spi/cxd2880-spi.c if (!dvb_spi) dvb_spi 523 drivers/media/spi/cxd2880-spi.c dvb_spi->vcc_supply = devm_regulator_get_optional(&spi->dev, "vcc"); dvb_spi 524 drivers/media/spi/cxd2880-spi.c if (IS_ERR(dvb_spi->vcc_supply)) { dvb_spi 525 drivers/media/spi/cxd2880-spi.c if (PTR_ERR(dvb_spi->vcc_supply) == -EPROBE_DEFER) { dvb_spi 529 drivers/media/spi/cxd2880-spi.c dvb_spi->vcc_supply = NULL; dvb_spi 531 drivers/media/spi/cxd2880-spi.c ret = regulator_enable(dvb_spi->vcc_supply); dvb_spi 536 drivers/media/spi/cxd2880-spi.c dvb_spi->spi = spi; dvb_spi 537 drivers/media/spi/cxd2880-spi.c mutex_init(&dvb_spi->spi_mutex); dvb_spi 538 drivers/media/spi/cxd2880-spi.c dev_set_drvdata(&spi->dev, dvb_spi); dvb_spi 540 drivers/media/spi/cxd2880-spi.c config.spi_mutex = &dvb_spi->spi_mutex; dvb_spi 542 drivers/media/spi/cxd2880-spi.c ret = dvb_register_adapter(&dvb_spi->adapter, dvb_spi 552 drivers/media/spi/cxd2880-spi.c if (!dvb_attach(cxd2880_attach, &dvb_spi->dvb_fe, &config)) { dvb_spi 558 drivers/media/spi/cxd2880-spi.c ret = dvb_register_frontend(&dvb_spi->adapter, dvb_spi 559 drivers/media/spi/cxd2880-spi.c &dvb_spi->dvb_fe); dvb_spi 565 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.dmx.capabilities = DMX_TS_FILTERING; dvb_spi 566 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.priv = dvb_spi; dvb_spi 567 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.filternum = CXD2880_MAX_FILTER_SIZE; dvb_spi 568 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.feednum = CXD2880_MAX_FILTER_SIZE; dvb_spi 569 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.start_feed = cxd2880_start_feed; dvb_spi 570 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.stop_feed = cxd2880_stop_feed; dvb_spi 572 drivers/media/spi/cxd2880-spi.c ret = dvb_dmx_init(&dvb_spi->demux); dvb_spi 578 drivers/media/spi/cxd2880-spi.c dvb_spi->dmxdev.filternum = CXD2880_MAX_FILTER_SIZE; dvb_spi 579 drivers/media/spi/cxd2880-spi.c dvb_spi->dmxdev.demux = &dvb_spi->demux.dmx; dvb_spi 580 drivers/media/spi/cxd2880-spi.c dvb_spi->dmxdev.capabilities = 0; dvb_spi 581 drivers/media/spi/cxd2880-spi.c ret = dvb_dmxdev_init(&dvb_spi->dmxdev, dvb_spi 582 drivers/media/spi/cxd2880-spi.c &dvb_spi->adapter); dvb_spi 588 drivers/media/spi/cxd2880-spi.c dvb_spi->dmx_fe.source = DMX_FRONTEND_0; dvb_spi 589 drivers/media/spi/cxd2880-spi.c ret = dvb_spi->demux.dmx.add_frontend(&dvb_spi->demux.dmx, dvb_spi 590 drivers/media/spi/cxd2880-spi.c &dvb_spi->dmx_fe); dvb_spi 596 drivers/media/spi/cxd2880-spi.c ret = dvb_spi->demux.dmx.connect_frontend(&dvb_spi->demux.dmx, dvb_spi 597 drivers/media/spi/cxd2880-spi.c &dvb_spi->dmx_fe); dvb_spi 608 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.dmx.remove_frontend(&dvb_spi->demux.dmx, dvb_spi 609 drivers/media/spi/cxd2880-spi.c &dvb_spi->dmx_fe); dvb_spi 611 drivers/media/spi/cxd2880-spi.c dvb_dmxdev_release(&dvb_spi->dmxdev); dvb_spi 613 drivers/media/spi/cxd2880-spi.c dvb_dmx_release(&dvb_spi->demux); dvb_spi 615 drivers/media/spi/cxd2880-spi.c dvb_unregister_frontend(&dvb_spi->dvb_fe); dvb_spi 617 drivers/media/spi/cxd2880-spi.c dvb_frontend_detach(&dvb_spi->dvb_fe); dvb_spi 619 drivers/media/spi/cxd2880-spi.c dvb_unregister_adapter(&dvb_spi->adapter); dvb_spi 621 drivers/media/spi/cxd2880-spi.c kfree(dvb_spi); dvb_spi 628 drivers/media/spi/cxd2880-spi.c struct cxd2880_dvb_spi *dvb_spi; dvb_spi 635 drivers/media/spi/cxd2880-spi.c dvb_spi = dev_get_drvdata(&spi->dev); dvb_spi 637 drivers/media/spi/cxd2880-spi.c if (!dvb_spi) { dvb_spi 641 drivers/media/spi/cxd2880-spi.c dvb_spi->demux.dmx.remove_frontend(&dvb_spi->demux.dmx, dvb_spi 642 drivers/media/spi/cxd2880-spi.c &dvb_spi->dmx_fe); dvb_spi 643 drivers/media/spi/cxd2880-spi.c dvb_dmxdev_release(&dvb_spi->dmxdev); dvb_spi 644 drivers/media/spi/cxd2880-spi.c dvb_dmx_release(&dvb_spi->demux); dvb_spi 645 drivers/media/spi/cxd2880-spi.c dvb_unregister_frontend(&dvb_spi->dvb_fe); dvb_spi 646 drivers/media/spi/cxd2880-spi.c dvb_frontend_detach(&dvb_spi->dvb_fe); dvb_spi 647 drivers/media/spi/cxd2880-spi.c dvb_unregister_adapter(&dvb_spi->adapter); dvb_spi 649 drivers/media/spi/cxd2880-spi.c if (dvb_spi->vcc_supply) dvb_spi 650 drivers/media/spi/cxd2880-spi.c regulator_disable(dvb_spi->vcc_supply); dvb_spi 652 drivers/media/spi/cxd2880-spi.c kfree(dvb_spi);