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);