Lines Matching refs:tc
46 struct atmel_tc *tc;
50 list_for_each_entry(tc, &tc_list, node) {
51 if (tc->allocated)
54 if ((tc->pdev->dev.of_node && tc->id == block) ||
55 (tc->pdev->id == block)) {
56 pdev = tc->pdev;
57 tc->allocated = true;
63 return pdev ? tc : NULL;
69 * @tc: Timer/counter block that was returned by atmel_tc_alloc()
74 void atmel_tc_free(struct atmel_tc *tc)
77 if (tc->allocated)
78 tc->allocated = false;
109 struct atmel_tc *tc;
121 tc = devm_kzalloc(&pdev->dev, sizeof(struct atmel_tc), GFP_KERNEL);
122 if (!tc)
125 tc->pdev = pdev;
131 tc->slow_clk = devm_clk_get(&pdev->dev, "slow_clk");
132 if (IS_ERR(tc->slow_clk))
133 return PTR_ERR(tc->slow_clk);
135 tc->regs = devm_platform_ioremap_resource(pdev, 0);
136 if (IS_ERR(tc->regs))
137 return PTR_ERR(tc->regs);
144 tc->tcb_config = match->data;
146 tc->id = of_alias_get_id(tc->pdev->dev.of_node, "tcb");
148 tc->id = pdev->id;
151 tc->clk[0] = clk;
152 tc->clk[1] = devm_clk_get(&pdev->dev, "t1_clk");
153 if (IS_ERR(tc->clk[1]))
154 tc->clk[1] = clk;
155 tc->clk[2] = devm_clk_get(&pdev->dev, "t2_clk");
156 if (IS_ERR(tc->clk[2]))
157 tc->clk[2] = clk;
159 tc->irq[0] = irq;
160 tc->irq[1] = platform_get_irq(pdev, 1);
161 if (tc->irq[1] < 0)
162 tc->irq[1] = irq;
163 tc->irq[2] = platform_get_irq(pdev, 2);
164 if (tc->irq[2] < 0)
165 tc->irq[2] = irq;
168 writel(ATMEL_TC_ALL_IRQ, tc->regs + ATMEL_TC_REG(i, IDR));
171 list_add_tail(&tc->node, &tc_list);
174 platform_set_drvdata(pdev, tc);
182 struct atmel_tc *tc = platform_get_drvdata(pdev);
185 writel(ATMEL_TC_ALL_IRQ, tc->regs + ATMEL_TC_REG(i, IDR));