799
797
EXPORT_SYMBOL(sport_set_err_callback);
801
struct sport_device *sport_init(struct sport_param *param, unsigned wdsize,
802
unsigned dummy_count, void *private_data)
799
static int sport_config_pdev(struct platform_device *pdev, struct sport_param *param)
801
/* Extract settings from platform data */
802
struct device *dev = &pdev->dev;
803
struct bfin_snd_platform_data *pdata = dev->platform_data;
804
struct resource *res;
806
param->num = pdev->id;
809
dev_err(dev, "no platform_data\n");
812
param->pin_req = pdata->pin_req;
814
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
816
dev_err(dev, "no MEM resource\n");
819
param->regs = (struct sport_register *)res->start;
821
/* first RX, then TX */
822
res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
824
dev_err(dev, "no rx DMA resource\n");
827
param->dma_rx_chan = res->start;
829
res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
831
dev_err(dev, "no tx DMA resource\n");
834
param->dma_tx_chan = res->start;
836
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
838
dev_err(dev, "no irq resource\n");
841
param->err_irq = res->start;
846
struct sport_device *sport_init(struct platform_device *pdev,
847
unsigned int wdsize, unsigned int dummy_count, size_t priv_size)
849
struct device *dev = &pdev->dev;
850
struct sport_param param;
805
851
struct sport_device *sport;
806
pr_debug("%s enter\n", __func__);
807
BUG_ON(param == NULL);
808
BUG_ON(wdsize == 0 || dummy_count == 0);
809
sport = kmalloc(sizeof(struct sport_device), GFP_KERNEL);
854
dev_dbg(dev, "%s enter\n", __func__);
856
param.wdsize = wdsize;
857
param.dummy_count = dummy_count;
858
BUG_ON(param.wdsize == 0 || param.dummy_count == 0);
860
ret = sport_config_pdev(pdev, ¶m);
864
if (peripheral_request_list(param.pin_req, "soc-audio")) {
865
dev_err(dev, "requesting Peripherals failed\n");
869
sport = kzalloc(sizeof(*sport), GFP_KERNEL);
811
pr_err("Failed to allocate for sport device\n");
871
dev_err(dev, "failed to allocate for sport device\n");
815
memset(sport, 0, sizeof(struct sport_device));
816
sport->dma_rx_chan = param->dma_rx_chan;
817
sport->dma_tx_chan = param->dma_tx_chan;
818
sport->err_irq = param->err_irq;
819
sport->regs = param->regs;
820
sport->private_data = private_data;
875
sport->num = param.num;
876
sport->dma_rx_chan = param.dma_rx_chan;
877
sport->dma_tx_chan = param.dma_tx_chan;
878
sport->err_irq = param.err_irq;
879
sport->regs = param.regs;
880
sport->pin_req = param.pin_req;
822
882
if (request_dma(sport->dma_rx_chan, "SPORT RX Data") == -EBUSY) {
823
pr_err("Failed to request RX dma %d\n", \
883
dev_err(dev, "failed to request RX dma %d\n", sport->dma_rx_chan);
825
884
goto __init_err1;
827
886
if (set_dma_callback(sport->dma_rx_chan, rx_handler, sport) != 0) {
828
pr_err("Failed to request RX irq %d\n", \
887
dev_err(dev, "failed to request RX irq %d\n", sport->dma_rx_chan);
830
888
goto __init_err2;
833
891
if (request_dma(sport->dma_tx_chan, "SPORT TX Data") == -EBUSY) {
834
pr_err("Failed to request TX dma %d\n", \
892
dev_err(dev, "failed to request TX dma %d\n", sport->dma_tx_chan);
836
893
goto __init_err2;
839
896
if (set_dma_callback(sport->dma_tx_chan, tx_handler, sport) != 0) {
840
pr_err("Failed to request TX irq %d\n", \
897
dev_err(dev, "failed to request TX irq %d\n", sport->dma_tx_chan);
842
898
goto __init_err3;
845
901
if (request_irq(sport->err_irq, err_handler, IRQF_SHARED, "SPORT err",
847
pr_err("Failed to request err irq:%d\n", \
903
dev_err(dev, "failed to request err irq %d\n", sport->err_irq);
849
904
goto __init_err3;
852
pr_err("dma rx:%d tx:%d, err irq:%d, regs:%p\n",
907
dev_info(dev, "dma rx:%d tx:%d, err irq:%d, regs:%p\n",
853
908
sport->dma_rx_chan, sport->dma_tx_chan,
854
909
sport->err_irq, sport->regs);
856
sport->wdsize = wdsize;
857
sport->dummy_count = dummy_count;
911
sport->wdsize = param.wdsize;
912
sport->dummy_count = param.dummy_count;
914
sport->private_data = kzalloc(priv_size, GFP_KERNEL);
915
if (!sport->private_data) {
916
dev_err(dev, "could not alloc priv data %zu bytes\n", priv_size);
859
920
if (L1_DATA_A_LENGTH)
860
sport->dummy_buf = l1_data_sram_zalloc(dummy_count * 2);
921
sport->dummy_buf = l1_data_sram_zalloc(param.dummy_count * 2);
862
sport->dummy_buf = kzalloc(dummy_count * 2, GFP_KERNEL);
923
sport->dummy_buf = kzalloc(param.dummy_count * 2, GFP_KERNEL);
863
924
if (sport->dummy_buf == NULL) {
864
pr_err("Failed to allocate dummy buffer\n");
925
dev_err(dev, "failed to allocate dummy buffer\n");
868
929
ret = sport_config_rx_dummy(sport);
870
pr_err("Failed to config rx dummy ring\n");
931
dev_err(dev, "failed to config rx dummy ring\n");
873
934
ret = sport_config_tx_dummy(sport);
875
pr_err("Failed to config tx dummy ring\n");
936
dev_err(dev, "failed to config tx dummy ring\n");
940
platform_set_drvdata(pdev, sport);
944
if (L1_DATA_A_LENGTH)
945
l1_data_sram_free(sport->dummy_rx_desc);
947
dma_free_coherent(NULL, 2*sizeof(struct dmasg),
948
sport->dummy_rx_desc, 0);
950
if (L1_DATA_A_LENGTH)
951
l1_data_sram_free(sport->dummy_buf);
953
kfree(sport->dummy_buf);
955
kfree(sport->private_data);
881
957
free_irq(sport->err_irq, sport);
883
959
free_dma(sport->dma_tx_chan);