316-v4.16-0001-brcmfmac-Remove-array-of-functions.patch 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043
  1. From c9aa7a91de740c537dc8c2f9f3d36fc651371b13 Mon Sep 17 00:00:00 2001
  2. From: Arend Van Spriel <[email protected]>
  3. Date: Tue, 9 Jan 2018 13:22:52 +0100
  4. Subject: [PATCH] brcmfmac: Remove array of functions
  5. Replace the array of functions with a pair of pointers to the
  6. relevant functions.
  7. Signed-off-by: Ian Molton <[email protected]>
  8. Acked-by: Arend van Spriel <[email protected]>
  9. Signed-off-by: Arend van Spriel <[email protected]>
  10. Signed-off-by: Kalle Valo <[email protected]>
  11. ---
  12. .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 115 +++++++-------
  13. .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 168 ++++++++++-----------
  14. .../wireless/broadcom/brcm80211/brcmfmac/sdio.h | 15 +-
  15. 3 files changed, 146 insertions(+), 152 deletions(-)
  16. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
  17. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
  18. @@ -118,7 +118,7 @@ int brcmf_sdiod_intr_register(struct brc
  19. ret = request_irq(pdata->oob_irq_nr, brcmf_sdiod_oob_irqhandler,
  20. pdata->oob_irq_flags, "brcmf_oob_intr",
  21. - &sdiodev->func[1]->dev);
  22. + &sdiodev->func1->dev);
  23. if (ret != 0) {
  24. brcmf_err("request_irq failed %d\n", ret);
  25. return ret;
  26. @@ -132,7 +132,7 @@ int brcmf_sdiod_intr_register(struct brc
  27. }
  28. sdiodev->irq_wake = true;
  29. - sdio_claim_host(sdiodev->func[1]);
  30. + sdio_claim_host(sdiodev->func1);
  31. if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
  32. /* assign GPIO to SDIO core */
  33. @@ -159,13 +159,13 @@ int brcmf_sdiod_intr_register(struct brc
  34. data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI;
  35. brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
  36. data, &ret);
  37. - sdio_release_host(sdiodev->func[1]);
  38. + sdio_release_host(sdiodev->func1);
  39. } else {
  40. brcmf_dbg(SDIO, "Entering\n");
  41. - sdio_claim_host(sdiodev->func[1]);
  42. - sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler);
  43. - sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler);
  44. - sdio_release_host(sdiodev->func[1]);
  45. + sdio_claim_host(sdiodev->func1);
  46. + sdio_claim_irq(sdiodev->func1, brcmf_sdiod_ib_irqhandler);
  47. + sdio_claim_irq(sdiodev->func2, brcmf_sdiod_dummy_irqhandler);
  48. + sdio_release_host(sdiodev->func1);
  49. sdiodev->sd_irq_requested = true;
  50. }
  51. @@ -183,26 +183,26 @@ void brcmf_sdiod_intr_unregister(struct
  52. struct brcmfmac_sdio_pd *pdata;
  53. pdata = &sdiodev->settings->bus.sdio;
  54. - sdio_claim_host(sdiodev->func[1]);
  55. + sdio_claim_host(sdiodev->func1);
  56. brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
  57. brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
  58. - sdio_release_host(sdiodev->func[1]);
  59. + sdio_release_host(sdiodev->func1);
  60. sdiodev->oob_irq_requested = false;
  61. if (sdiodev->irq_wake) {
  62. disable_irq_wake(pdata->oob_irq_nr);
  63. sdiodev->irq_wake = false;
  64. }
  65. - free_irq(pdata->oob_irq_nr, &sdiodev->func[1]->dev);
  66. + free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev);
  67. sdiodev->irq_en = false;
  68. sdiodev->oob_irq_requested = false;
  69. }
  70. if (sdiodev->sd_irq_requested) {
  71. - sdio_claim_host(sdiodev->func[1]);
  72. - sdio_release_irq(sdiodev->func[2]);
  73. - sdio_release_irq(sdiodev->func[1]);
  74. - sdio_release_host(sdiodev->func[1]);
  75. + sdio_claim_host(sdiodev->func1);
  76. + sdio_release_irq(sdiodev->func2);
  77. + sdio_release_irq(sdiodev->func1);
  78. + sdio_release_host(sdiodev->func1);
  79. sdiodev->sd_irq_requested = false;
  80. }
  81. }
  82. @@ -264,7 +264,7 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_
  83. addr &= SBSDIO_SB_OFT_ADDR_MASK;
  84. addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
  85. - data = sdio_readl(sdiodev->func[1], addr, &retval);
  86. + data = sdio_readl(sdiodev->func1, addr, &retval);
  87. out:
  88. if (ret)
  89. @@ -285,7 +285,7 @@ void brcmf_sdiod_writel(struct brcmf_sdi
  90. addr &= SBSDIO_SB_OFT_ADDR_MASK;
  91. addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
  92. - sdio_writel(sdiodev->func[1], data, addr, &retval);
  93. + sdio_writel(sdiodev->func1, data, addr, &retval);
  94. out:
  95. if (ret)
  96. @@ -550,7 +550,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
  97. addr &= SBSDIO_SB_OFT_ADDR_MASK;
  98. addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
  99. - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, pkt);
  100. + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr, pkt);
  101. done:
  102. return err;
  103. @@ -575,13 +575,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_
  104. addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
  105. if (pktq->qlen == 1)
  106. - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
  107. + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
  108. pktq->next);
  109. else if (!sdiodev->sg_support) {
  110. glom_skb = brcmu_pkt_buf_get_skb(totlen);
  111. if (!glom_skb)
  112. return -ENOMEM;
  113. - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
  114. + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
  115. glom_skb);
  116. if (err)
  117. goto done;
  118. @@ -591,7 +591,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
  119. skb_pull(glom_skb, skb->len);
  120. }
  121. } else
  122. - err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], false,
  123. + err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, false,
  124. addr, pktq);
  125. done:
  126. @@ -623,7 +623,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
  127. addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
  128. if (!err)
  129. - err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2], addr,
  130. + err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2, addr,
  131. mypkt);
  132. brcmu_pkt_buf_free_skb(mypkt);
  133. @@ -649,13 +649,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
  134. if (pktq->qlen == 1 || !sdiodev->sg_support) {
  135. skb_queue_walk(pktq, skb) {
  136. - err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2],
  137. + err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2,
  138. addr, skb);
  139. if (err)
  140. break;
  141. }
  142. } else {
  143. - err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], true,
  144. + err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, true,
  145. addr, pktq);
  146. }
  147. @@ -686,7 +686,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
  148. else
  149. dsize = size;
  150. - sdio_claim_host(sdiodev->func[1]);
  151. + sdio_claim_host(sdiodev->func1);
  152. /* Do the transfer(s) */
  153. while (size) {
  154. @@ -706,10 +706,10 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
  155. if (write) {
  156. memcpy(pkt->data, data, dsize);
  157. - err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[1],
  158. + err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func1,
  159. sdaddr, pkt);
  160. } else {
  161. - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[1],
  162. + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func1,
  163. sdaddr, pkt);
  164. }
  165. @@ -733,7 +733,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
  166. dev_kfree_skb(pkt);
  167. - sdio_release_host(sdiodev->func[1]);
  168. + sdio_release_host(sdiodev->func1);
  169. return err;
  170. }
  171. @@ -757,7 +757,7 @@ void brcmf_sdiod_sgtable_alloc(struct br
  172. uint nents;
  173. int err;
  174. - func = sdiodev->func[2];
  175. + func = sdiodev->func2;
  176. host = func->card->host;
  177. sdiodev->sg_support = host->max_segs > 1;
  178. max_blocks = min_t(uint, host->max_blk_count, 511u);
  179. @@ -818,17 +818,17 @@ static int brcmf_sdiod_freezer_on(struct
  180. brcmf_sdio_trigger_dpc(sdiodev->bus);
  181. wait_event(sdiodev->freezer->thread_freeze,
  182. atomic_read(expect) == sdiodev->freezer->frozen_count);
  183. - sdio_claim_host(sdiodev->func[1]);
  184. + sdio_claim_host(sdiodev->func1);
  185. res = brcmf_sdio_sleep(sdiodev->bus, true);
  186. - sdio_release_host(sdiodev->func[1]);
  187. + sdio_release_host(sdiodev->func1);
  188. return res;
  189. }
  190. static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev)
  191. {
  192. - sdio_claim_host(sdiodev->func[1]);
  193. + sdio_claim_host(sdiodev->func1);
  194. brcmf_sdio_sleep(sdiodev->bus, false);
  195. - sdio_release_host(sdiodev->func[1]);
  196. + sdio_release_host(sdiodev->func1);
  197. atomic_set(&sdiodev->freezer->freezing, 0);
  198. complete_all(&sdiodev->freezer->resumed);
  199. }
  200. @@ -878,19 +878,19 @@ static int brcmf_sdiod_remove(struct brc
  201. brcmf_sdiod_freezer_detach(sdiodev);
  202. /* Disable Function 2 */
  203. - sdio_claim_host(sdiodev->func[2]);
  204. - sdio_disable_func(sdiodev->func[2]);
  205. - sdio_release_host(sdiodev->func[2]);
  206. + sdio_claim_host(sdiodev->func2);
  207. + sdio_disable_func(sdiodev->func2);
  208. + sdio_release_host(sdiodev->func2);
  209. /* Disable Function 1 */
  210. - sdio_claim_host(sdiodev->func[1]);
  211. - sdio_disable_func(sdiodev->func[1]);
  212. - sdio_release_host(sdiodev->func[1]);
  213. + sdio_claim_host(sdiodev->func1);
  214. + sdio_disable_func(sdiodev->func1);
  215. + sdio_release_host(sdiodev->func1);
  216. sg_free_table(&sdiodev->sgtable);
  217. sdiodev->sbwad = 0;
  218. - pm_runtime_allow(sdiodev->func[1]->card->host->parent);
  219. + pm_runtime_allow(sdiodev->func1->card->host->parent);
  220. return 0;
  221. }
  222. @@ -906,29 +906,27 @@ static int brcmf_sdiod_probe(struct brcm
  223. {
  224. int ret = 0;
  225. - sdiodev->num_funcs = 2;
  226. + sdio_claim_host(sdiodev->func1);
  227. - sdio_claim_host(sdiodev->func[1]);
  228. -
  229. - ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE);
  230. + ret = sdio_set_block_size(sdiodev->func1, SDIO_FUNC1_BLOCKSIZE);
  231. if (ret) {
  232. brcmf_err("Failed to set F1 blocksize\n");
  233. - sdio_release_host(sdiodev->func[1]);
  234. + sdio_release_host(sdiodev->func1);
  235. goto out;
  236. }
  237. - ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE);
  238. + ret = sdio_set_block_size(sdiodev->func2, SDIO_FUNC2_BLOCKSIZE);
  239. if (ret) {
  240. brcmf_err("Failed to set F2 blocksize\n");
  241. - sdio_release_host(sdiodev->func[1]);
  242. + sdio_release_host(sdiodev->func1);
  243. goto out;
  244. }
  245. /* increase F2 timeout */
  246. - sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY;
  247. + sdiodev->func2->enable_timeout = SDIO_WAIT_F2RDY;
  248. /* Enable Function 1 */
  249. - ret = sdio_enable_func(sdiodev->func[1]);
  250. - sdio_release_host(sdiodev->func[1]);
  251. + ret = sdio_enable_func(sdiodev->func1);
  252. + sdio_release_host(sdiodev->func1);
  253. if (ret) {
  254. brcmf_err("Failed to enable F1: err=%d\n", ret);
  255. goto out;
  256. @@ -944,7 +942,7 @@ static int brcmf_sdiod_probe(struct brcm
  257. ret = -ENODEV;
  258. goto out;
  259. }
  260. - brcmf_sdiod_host_fixup(sdiodev->func[2]->card->host);
  261. + brcmf_sdiod_host_fixup(sdiodev->func2->card->host);
  262. out:
  263. if (ret)
  264. brcmf_sdiod_remove(sdiodev);
  265. @@ -1032,16 +1030,15 @@ static int brcmf_ops_sdio_probe(struct s
  266. /* store refs to functions used. mmc_card does
  267. * not hold the F0 function pointer.
  268. */
  269. - sdiodev->func[0] = NULL;
  270. - sdiodev->func[1] = func->card->sdio_func[0];
  271. - sdiodev->func[2] = func;
  272. + sdiodev->func1 = func->card->sdio_func[0];
  273. + sdiodev->func2 = func;
  274. sdiodev->bus_if = bus_if;
  275. bus_if->bus_priv.sdio = sdiodev;
  276. bus_if->proto_type = BRCMF_PROTO_BCDC;
  277. dev_set_drvdata(&func->dev, bus_if);
  278. - dev_set_drvdata(&sdiodev->func[1]->dev, bus_if);
  279. - sdiodev->dev = &sdiodev->func[1]->dev;
  280. + dev_set_drvdata(&sdiodev->func1->dev, bus_if);
  281. + sdiodev->dev = &sdiodev->func1->dev;
  282. brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN);
  283. @@ -1057,7 +1054,7 @@ static int brcmf_ops_sdio_probe(struct s
  284. fail:
  285. dev_set_drvdata(&func->dev, NULL);
  286. - dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
  287. + dev_set_drvdata(&sdiodev->func1->dev, NULL);
  288. kfree(sdiodev);
  289. kfree(bus_if);
  290. return err;
  291. @@ -1086,8 +1083,8 @@ static void brcmf_ops_sdio_remove(struct
  292. /* only proceed with rest of cleanup if func 1 */
  293. brcmf_sdiod_remove(sdiodev);
  294. - dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
  295. - dev_set_drvdata(&sdiodev->func[2]->dev, NULL);
  296. + dev_set_drvdata(&sdiodev->func1->dev, NULL);
  297. + dev_set_drvdata(&sdiodev->func2->dev, NULL);
  298. kfree(bus_if);
  299. kfree(sdiodev);
  300. @@ -1132,7 +1129,7 @@ static int brcmf_ops_sdio_suspend(struct
  301. else
  302. sdio_flags |= MMC_PM_WAKE_SDIO_IRQ;
  303. }
  304. - if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags))
  305. + if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags))
  306. brcmf_err("Failed to set pm_flags %x\n", sdio_flags);
  307. return 0;
  308. }
  309. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  310. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  311. @@ -979,7 +979,7 @@ static int brcmf_sdio_readshared(struct
  312. struct sdpcm_shared_le sh_le;
  313. __le32 addr_le;
  314. - sdio_claim_host(bus->sdiodev->func[1]);
  315. + sdio_claim_host(bus->sdiodev->func1);
  316. brcmf_sdio_bus_sleep(bus, false, false);
  317. /*
  318. @@ -1013,7 +1013,7 @@ static int brcmf_sdio_readshared(struct
  319. if (rv < 0)
  320. goto fail;
  321. - sdio_release_host(bus->sdiodev->func[1]);
  322. + sdio_release_host(bus->sdiodev->func1);
  323. /* Endianness */
  324. sh->flags = le32_to_cpu(sh_le.flags);
  325. @@ -1035,7 +1035,7 @@ static int brcmf_sdio_readshared(struct
  326. fail:
  327. brcmf_err("unable to obtain sdpcm_shared info: rv=%d (addr=0x%x)\n",
  328. rv, addr);
  329. - sdio_release_host(bus->sdiodev->func[1]);
  330. + sdio_release_host(bus->sdiodev->func1);
  331. return rv;
  332. }
  333. @@ -1157,7 +1157,7 @@ static void brcmf_sdio_rxfail(struct brc
  334. rtx ? ", send NAK" : "");
  335. if (abort)
  336. - brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func[2]);
  337. + brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func2);
  338. brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
  339. &err);
  340. @@ -1209,7 +1209,7 @@ static void brcmf_sdio_txfail(struct brc
  341. brcmf_err("sdio error, abort command and terminate frame\n");
  342. bus->sdcnt.tx_sderrs++;
  343. - brcmf_sdiod_abort(sdiodev, sdiodev->func[2]);
  344. + brcmf_sdiod_abort(sdiodev, sdiodev->func2);
  345. brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
  346. bus->sdcnt.f1regdata++;
  347. @@ -1565,10 +1565,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
  348. * read directly into the chained packet, or allocate a large
  349. * packet and and copy into the chain.
  350. */
  351. - sdio_claim_host(bus->sdiodev->func[1]);
  352. + sdio_claim_host(bus->sdiodev->func1);
  353. errcode = brcmf_sdiod_recv_chain(bus->sdiodev,
  354. &bus->glom, dlen);
  355. - sdio_release_host(bus->sdiodev->func[1]);
  356. + sdio_release_host(bus->sdiodev->func1);
  357. bus->sdcnt.f2rxdata++;
  358. /* On failure, kill the superframe */
  359. @@ -1576,11 +1576,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf
  360. brcmf_err("glom read of %d bytes failed: %d\n",
  361. dlen, errcode);
  362. - sdio_claim_host(bus->sdiodev->func[1]);
  363. + sdio_claim_host(bus->sdiodev->func1);
  364. brcmf_sdio_rxfail(bus, true, false);
  365. bus->sdcnt.rxglomfail++;
  366. brcmf_sdio_free_glom(bus);
  367. - sdio_release_host(bus->sdiodev->func[1]);
  368. + sdio_release_host(bus->sdiodev->func1);
  369. return 0;
  370. }
  371. @@ -1590,10 +1590,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
  372. rd_new.seq_num = rxseq;
  373. rd_new.len = dlen;
  374. - sdio_claim_host(bus->sdiodev->func[1]);
  375. + sdio_claim_host(bus->sdiodev->func1);
  376. errcode = brcmf_sdio_hdparse(bus, pfirst->data, &rd_new,
  377. BRCMF_SDIO_FT_SUPER);
  378. - sdio_release_host(bus->sdiodev->func[1]);
  379. + sdio_release_host(bus->sdiodev->func1);
  380. bus->cur_read.len = rd_new.len_nxtfrm << 4;
  381. /* Remove superframe header, remember offset */
  382. @@ -1609,10 +1609,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
  383. rd_new.len = pnext->len;
  384. rd_new.seq_num = rxseq++;
  385. - sdio_claim_host(bus->sdiodev->func[1]);
  386. + sdio_claim_host(bus->sdiodev->func1);
  387. errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new,
  388. BRCMF_SDIO_FT_SUB);
  389. - sdio_release_host(bus->sdiodev->func[1]);
  390. + sdio_release_host(bus->sdiodev->func1);
  391. brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
  392. pnext->data, 32, "subframe:\n");
  393. @@ -1621,11 +1621,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf
  394. if (errcode) {
  395. /* Terminate frame on error */
  396. - sdio_claim_host(bus->sdiodev->func[1]);
  397. + sdio_claim_host(bus->sdiodev->func1);
  398. brcmf_sdio_rxfail(bus, true, false);
  399. bus->sdcnt.rxglomfail++;
  400. brcmf_sdio_free_glom(bus);
  401. - sdio_release_host(bus->sdiodev->func[1]);
  402. + sdio_release_host(bus->sdiodev->func1);
  403. bus->cur_read.len = 0;
  404. return 0;
  405. }
  406. @@ -1833,7 +1833,7 @@ static uint brcmf_sdio_readframes(struct
  407. rd->len_left = rd->len;
  408. /* read header first for unknow frame length */
  409. - sdio_claim_host(bus->sdiodev->func[1]);
  410. + sdio_claim_host(bus->sdiodev->func1);
  411. if (!rd->len) {
  412. ret = brcmf_sdiod_recv_buf(bus->sdiodev,
  413. bus->rxhdr, BRCMF_FIRSTREAD);
  414. @@ -1843,7 +1843,7 @@ static uint brcmf_sdio_readframes(struct
  415. ret);
  416. bus->sdcnt.rx_hdrfail++;
  417. brcmf_sdio_rxfail(bus, true, true);
  418. - sdio_release_host(bus->sdiodev->func[1]);
  419. + sdio_release_host(bus->sdiodev->func1);
  420. continue;
  421. }
  422. @@ -1853,7 +1853,7 @@ static uint brcmf_sdio_readframes(struct
  423. if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd,
  424. BRCMF_SDIO_FT_NORMAL)) {
  425. - sdio_release_host(bus->sdiodev->func[1]);
  426. + sdio_release_host(bus->sdiodev->func1);
  427. if (!bus->rxpending)
  428. break;
  429. else
  430. @@ -1869,7 +1869,7 @@ static uint brcmf_sdio_readframes(struct
  431. rd->len_nxtfrm = 0;
  432. /* treat all packet as event if we don't know */
  433. rd->channel = SDPCM_EVENT_CHANNEL;
  434. - sdio_release_host(bus->sdiodev->func[1]);
  435. + sdio_release_host(bus->sdiodev->func1);
  436. continue;
  437. }
  438. rd->len_left = rd->len > BRCMF_FIRSTREAD ?
  439. @@ -1886,7 +1886,7 @@ static uint brcmf_sdio_readframes(struct
  440. brcmf_err("brcmu_pkt_buf_get_skb failed\n");
  441. brcmf_sdio_rxfail(bus, false,
  442. RETRYCHAN(rd->channel));
  443. - sdio_release_host(bus->sdiodev->func[1]);
  444. + sdio_release_host(bus->sdiodev->func1);
  445. continue;
  446. }
  447. skb_pull(pkt, head_read);
  448. @@ -1894,16 +1894,16 @@ static uint brcmf_sdio_readframes(struct
  449. ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt);
  450. bus->sdcnt.f2rxdata++;
  451. - sdio_release_host(bus->sdiodev->func[1]);
  452. + sdio_release_host(bus->sdiodev->func1);
  453. if (ret < 0) {
  454. brcmf_err("read %d bytes from channel %d failed: %d\n",
  455. rd->len, rd->channel, ret);
  456. brcmu_pkt_buf_free_skb(pkt);
  457. - sdio_claim_host(bus->sdiodev->func[1]);
  458. + sdio_claim_host(bus->sdiodev->func1);
  459. brcmf_sdio_rxfail(bus, true,
  460. RETRYCHAN(rd->channel));
  461. - sdio_release_host(bus->sdiodev->func[1]);
  462. + sdio_release_host(bus->sdiodev->func1);
  463. continue;
  464. }
  465. @@ -1914,7 +1914,7 @@ static uint brcmf_sdio_readframes(struct
  466. } else {
  467. memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN);
  468. rd_new.seq_num = rd->seq_num;
  469. - sdio_claim_host(bus->sdiodev->func[1]);
  470. + sdio_claim_host(bus->sdiodev->func1);
  471. if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new,
  472. BRCMF_SDIO_FT_NORMAL)) {
  473. rd->len = 0;
  474. @@ -1927,11 +1927,11 @@ static uint brcmf_sdio_readframes(struct
  475. roundup(rd_new.len, 16) >> 4);
  476. rd->len = 0;
  477. brcmf_sdio_rxfail(bus, true, true);
  478. - sdio_release_host(bus->sdiodev->func[1]);
  479. + sdio_release_host(bus->sdiodev->func1);
  480. brcmu_pkt_buf_free_skb(pkt);
  481. continue;
  482. }
  483. - sdio_release_host(bus->sdiodev->func[1]);
  484. + sdio_release_host(bus->sdiodev->func1);
  485. rd->len_nxtfrm = rd_new.len_nxtfrm;
  486. rd->channel = rd_new.channel;
  487. rd->dat_offset = rd_new.dat_offset;
  488. @@ -1947,9 +1947,9 @@ static uint brcmf_sdio_readframes(struct
  489. rd_new.seq_num);
  490. /* Force retry w/normal header read */
  491. rd->len = 0;
  492. - sdio_claim_host(bus->sdiodev->func[1]);
  493. + sdio_claim_host(bus->sdiodev->func1);
  494. brcmf_sdio_rxfail(bus, false, true);
  495. - sdio_release_host(bus->sdiodev->func[1]);
  496. + sdio_release_host(bus->sdiodev->func1);
  497. brcmu_pkt_buf_free_skb(pkt);
  498. continue;
  499. }
  500. @@ -1972,9 +1972,9 @@ static uint brcmf_sdio_readframes(struct
  501. } else {
  502. brcmf_err("%s: glom superframe w/o "
  503. "descriptor!\n", __func__);
  504. - sdio_claim_host(bus->sdiodev->func[1]);
  505. + sdio_claim_host(bus->sdiodev->func1);
  506. brcmf_sdio_rxfail(bus, false, false);
  507. - sdio_release_host(bus->sdiodev->func[1]);
  508. + sdio_release_host(bus->sdiodev->func1);
  509. }
  510. /* prepare the descriptor for the next read */
  511. rd->len = rd->len_nxtfrm << 4;
  512. @@ -2072,7 +2072,7 @@ static int brcmf_sdio_txpkt_prep_sg(stru
  513. int ntail, ret;
  514. sdiodev = bus->sdiodev;
  515. - blksize = sdiodev->func[2]->cur_blksize;
  516. + blksize = sdiodev->func2->cur_blksize;
  517. /* sg entry alignment should be a divisor of block size */
  518. WARN_ON(blksize % bus->sgentry_align);
  519. @@ -2251,14 +2251,14 @@ static int brcmf_sdio_txpkt(struct brcmf
  520. if (ret)
  521. goto done;
  522. - sdio_claim_host(bus->sdiodev->func[1]);
  523. + sdio_claim_host(bus->sdiodev->func1);
  524. ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq);
  525. bus->sdcnt.f2txdata++;
  526. if (ret < 0)
  527. brcmf_sdio_txfail(bus);
  528. - sdio_release_host(bus->sdiodev->func[1]);
  529. + sdio_release_host(bus->sdiodev->func1);
  530. done:
  531. brcmf_sdio_txpkt_postp(bus, pktq);
  532. @@ -2314,10 +2314,11 @@ static uint brcmf_sdio_sendfromq(struct
  533. /* In poll mode, need to check for other events */
  534. if (!bus->intr) {
  535. /* Check device status, signal pending interrupt */
  536. - sdio_claim_host(bus->sdiodev->func[1]);
  537. + sdio_claim_host(bus->sdiodev->func1);
  538. intstatus = brcmf_sdiod_readl(bus->sdiodev,
  539. intstat_addr, &ret);
  540. - sdio_release_host(bus->sdiodev->func[1]);
  541. + sdio_release_host(bus->sdiodev->func1);
  542. +
  543. bus->sdcnt.f2txdata++;
  544. if (ret != 0)
  545. break;
  546. @@ -2417,7 +2418,7 @@ static void brcmf_sdio_bus_stop(struct d
  547. }
  548. if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
  549. - sdio_claim_host(sdiodev->func[1]);
  550. + sdio_claim_host(sdiodev->func1);
  551. /* Enable clock for device interrupts */
  552. brcmf_sdio_bus_sleep(bus, false, false);
  553. @@ -2441,13 +2442,13 @@ static void brcmf_sdio_bus_stop(struct d
  554. /* Turn off the bus (F2), free any pending packets */
  555. brcmf_dbg(INTR, "disable SDIO interrupts\n");
  556. - sdio_disable_func(sdiodev->func[2]);
  557. + sdio_disable_func(sdiodev->func2);
  558. /* Clear any pending interrupts now that F2 is disabled */
  559. brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
  560. local_hostintmask, NULL);
  561. - sdio_release_host(sdiodev->func[1]);
  562. + sdio_release_host(sdiodev->func1);
  563. }
  564. /* Clear the data packet queues */
  565. brcmu_pktq_flush(&bus->txq, true, NULL, NULL);
  566. @@ -2522,7 +2523,7 @@ static void brcmf_sdio_dpc(struct brcmf_
  567. brcmf_dbg(TRACE, "Enter\n");
  568. - sdio_claim_host(bus->sdiodev->func[1]);
  569. + sdio_claim_host(bus->sdiodev->func1);
  570. /* If waiting for HTAVAIL, check status */
  571. if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) {
  572. @@ -2585,7 +2586,7 @@ static void brcmf_sdio_dpc(struct brcmf_
  573. intstatus |= brcmf_sdio_hostmail(bus);
  574. }
  575. - sdio_release_host(bus->sdiodev->func[1]);
  576. + sdio_release_host(bus->sdiodev->func1);
  577. /* Generally don't ask for these, can get CRC errors... */
  578. if (intstatus & I_WR_OOSYNC) {
  579. @@ -2628,7 +2629,7 @@ static void brcmf_sdio_dpc(struct brcmf_
  580. if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) &&
  581. data_ok(bus)) {
  582. - sdio_claim_host(bus->sdiodev->func[1]);
  583. + sdio_claim_host(bus->sdiodev->func1);
  584. if (bus->ctrl_frame_stat) {
  585. err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf,
  586. bus->ctrl_frame_len);
  587. @@ -2636,7 +2637,7 @@ static void brcmf_sdio_dpc(struct brcmf_
  588. wmb();
  589. bus->ctrl_frame_stat = false;
  590. }
  591. - sdio_release_host(bus->sdiodev->func[1]);
  592. + sdio_release_host(bus->sdiodev->func1);
  593. brcmf_sdio_wait_event_wakeup(bus);
  594. }
  595. /* Send queued frames (limit 1 if rx may still be pending) */
  596. @@ -2652,14 +2653,14 @@ static void brcmf_sdio_dpc(struct brcmf_
  597. brcmf_err("failed backplane access over SDIO, halting operation\n");
  598. atomic_set(&bus->intstatus, 0);
  599. if (bus->ctrl_frame_stat) {
  600. - sdio_claim_host(bus->sdiodev->func[1]);
  601. + sdio_claim_host(bus->sdiodev->func1);
  602. if (bus->ctrl_frame_stat) {
  603. bus->ctrl_frame_err = -ENODEV;
  604. wmb();
  605. bus->ctrl_frame_stat = false;
  606. brcmf_sdio_wait_event_wakeup(bus);
  607. }
  608. - sdio_release_host(bus->sdiodev->func[1]);
  609. + sdio_release_host(bus->sdiodev->func1);
  610. }
  611. } else if (atomic_read(&bus->intstatus) ||
  612. atomic_read(&bus->ipend) > 0 ||
  613. @@ -2874,13 +2875,13 @@ brcmf_sdio_bus_txctl(struct device *dev,
  614. CTL_DONE_TIMEOUT);
  615. ret = 0;
  616. if (bus->ctrl_frame_stat) {
  617. - sdio_claim_host(bus->sdiodev->func[1]);
  618. + sdio_claim_host(bus->sdiodev->func1);
  619. if (bus->ctrl_frame_stat) {
  620. brcmf_dbg(SDIO, "ctrl_frame timeout\n");
  621. bus->ctrl_frame_stat = false;
  622. ret = -ETIMEDOUT;
  623. }
  624. - sdio_release_host(bus->sdiodev->func[1]);
  625. + sdio_release_host(bus->sdiodev->func1);
  626. }
  627. if (!ret) {
  628. brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n",
  629. @@ -3004,7 +3005,7 @@ static int brcmf_sdio_assert_info(struct
  630. return 0;
  631. }
  632. - sdio_claim_host(bus->sdiodev->func[1]);
  633. + sdio_claim_host(bus->sdiodev->func1);
  634. if (sh->assert_file_addr != 0) {
  635. error = brcmf_sdiod_ramrw(bus->sdiodev, false,
  636. sh->assert_file_addr, (u8 *)file, 80);
  637. @@ -3017,7 +3018,7 @@ static int brcmf_sdio_assert_info(struct
  638. if (error < 0)
  639. return error;
  640. }
  641. - sdio_release_host(bus->sdiodev->func[1]);
  642. + sdio_release_host(bus->sdiodev->func1);
  643. seq_printf(seq, "dongle assert: %s:%d: assert(%s)\n",
  644. file, sh->assert_line, expr);
  645. @@ -3291,7 +3292,7 @@ static int brcmf_sdio_download_firmware(
  646. int bcmerror;
  647. u32 rstvec;
  648. - sdio_claim_host(bus->sdiodev->func[1]);
  649. + sdio_claim_host(bus->sdiodev->func1);
  650. brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
  651. rstvec = get_unaligned_le32(fw->data);
  652. @@ -3320,7 +3321,7 @@ static int brcmf_sdio_download_firmware(
  653. err:
  654. brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
  655. - sdio_release_host(bus->sdiodev->func[1]);
  656. + sdio_release_host(bus->sdiodev->func1);
  657. return bcmerror;
  658. }
  659. @@ -3435,7 +3436,7 @@ static int brcmf_sdio_bus_preinit(struct
  660. if (sdiodev->sg_support) {
  661. bus->txglom = false;
  662. value = 1;
  663. - pad_size = bus->sdiodev->func[2]->cur_blksize << 1;
  664. + pad_size = bus->sdiodev->func2->cur_blksize << 1;
  665. err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom",
  666. &value, sizeof(u32));
  667. if (err < 0) {
  668. @@ -3477,7 +3478,7 @@ static int brcmf_sdio_bus_get_memdump(st
  669. address = bus->ci->rambase;
  670. offset = err = 0;
  671. - sdio_claim_host(sdiodev->func[1]);
  672. + sdio_claim_host(sdiodev->func1);
  673. while (offset < mem_size) {
  674. len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK :
  675. mem_size - offset;
  676. @@ -3493,7 +3494,7 @@ static int brcmf_sdio_bus_get_memdump(st
  677. }
  678. done:
  679. - sdio_release_host(sdiodev->func[1]);
  680. + sdio_release_host(sdiodev->func1);
  681. return err;
  682. }
  683. @@ -3550,11 +3551,10 @@ static void brcmf_sdio_bus_watchdog(stru
  684. if (!bus->dpc_triggered) {
  685. u8 devpend;
  686. - sdio_claim_host(bus->sdiodev->func[1]);
  687. + sdio_claim_host(bus->sdiodev->func1);
  688. devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
  689. - SDIO_CCCR_INTx,
  690. - NULL);
  691. - sdio_release_host(bus->sdiodev->func[1]);
  692. + SDIO_CCCR_INTx, NULL);
  693. + sdio_release_host(bus->sdiodev->func1);
  694. intstatus = devpend & (INTR_STATUS_FUNC1 |
  695. INTR_STATUS_FUNC2);
  696. }
  697. @@ -3580,13 +3580,13 @@ static void brcmf_sdio_bus_watchdog(stru
  698. bus->console.count += jiffies_to_msecs(BRCMF_WD_POLL);
  699. if (bus->console.count >= bus->console_interval) {
  700. bus->console.count -= bus->console_interval;
  701. - sdio_claim_host(bus->sdiodev->func[1]);
  702. + sdio_claim_host(bus->sdiodev->func1);
  703. /* Make sure backplane clock is on */
  704. brcmf_sdio_bus_sleep(bus, false, false);
  705. if (brcmf_sdio_readconsole(bus) < 0)
  706. /* stop on error */
  707. bus->console_interval = 0;
  708. - sdio_release_host(bus->sdiodev->func[1]);
  709. + sdio_release_host(bus->sdiodev->func1);
  710. }
  711. }
  712. #endif /* DEBUG */
  713. @@ -3599,11 +3599,11 @@ static void brcmf_sdio_bus_watchdog(stru
  714. bus->idlecount++;
  715. if (bus->idlecount > bus->idletime) {
  716. brcmf_dbg(SDIO, "idle\n");
  717. - sdio_claim_host(bus->sdiodev->func[1]);
  718. + sdio_claim_host(bus->sdiodev->func1);
  719. brcmf_sdio_wd_timer(bus, false);
  720. bus->idlecount = 0;
  721. brcmf_sdio_bus_sleep(bus, true, false);
  722. - sdio_release_host(bus->sdiodev->func[1]);
  723. + sdio_release_host(bus->sdiodev->func1);
  724. }
  725. } else {
  726. bus->idlecount = 0;
  727. @@ -3773,8 +3773,8 @@ static u32 brcmf_sdio_buscore_read32(voi
  728. val = brcmf_sdiod_readl(sdiodev, addr, NULL);
  729. if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) &&
  730. - (sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
  731. - sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
  732. + (sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
  733. + sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
  734. rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
  735. if (rev >= 2) {
  736. val &= ~CID_ID_MASK;
  737. @@ -3810,7 +3810,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
  738. u32 drivestrength;
  739. sdiodev = bus->sdiodev;
  740. - sdio_claim_host(sdiodev->func[1]);
  741. + sdio_claim_host(sdiodev->func1);
  742. pr_debug("F1 signature read @0x18000000=0x%4x\n",
  743. brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
  744. @@ -3877,8 +3877,8 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
  745. /* wowl can be supported when KEEP_POWER is true and (WAKE_SDIO_IRQ
  746. * is true or when platform data OOB irq is true).
  747. */
  748. - if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) &&
  749. - ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) ||
  750. + if ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_KEEP_POWER) &&
  751. + ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_WAKE_SDIO_IRQ) ||
  752. (sdiodev->settings->bus.sdio.oob_irq_supported)))
  753. sdiodev->bus_if->wowl_supported = true;
  754. #endif
  755. @@ -3917,7 +3917,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
  756. if (err)
  757. goto fail;
  758. - sdio_release_host(sdiodev->func[1]);
  759. + sdio_release_host(sdiodev->func1);
  760. brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);
  761. @@ -3938,7 +3938,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
  762. return true;
  763. fail:
  764. - sdio_release_host(sdiodev->func[1]);
  765. + sdio_release_host(sdiodev->func1);
  766. return false;
  767. }
  768. @@ -4044,7 +4044,7 @@ static void brcmf_sdio_firmware_callback
  769. bus->sdcnt.tickcnt = 0;
  770. brcmf_sdio_wd_timer(bus, true);
  771. - sdio_claim_host(sdiodev->func[1]);
  772. + sdio_claim_host(sdiodev->func1);
  773. /* Make sure backplane clock is on, needed to generate F2 interrupt */
  774. brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
  775. @@ -4066,7 +4066,7 @@ static void brcmf_sdio_firmware_callback
  776. brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
  777. SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
  778. - err = sdio_enable_func(sdiodev->func[2]);
  779. + err = sdio_enable_func(sdiodev->func2);
  780. brcmf_dbg(INFO, "enable F2: err=%d\n", err);
  781. @@ -4081,7 +4081,7 @@ static void brcmf_sdio_firmware_callback
  782. brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
  783. } else {
  784. /* Disable F2 again */
  785. - sdio_disable_func(sdiodev->func[2]);
  786. + sdio_disable_func(sdiodev->func2);
  787. goto release;
  788. }
  789. @@ -4106,7 +4106,7 @@ static void brcmf_sdio_firmware_callback
  790. if (err != 0)
  791. brcmf_sdio_clkctl(bus, CLK_NONE, false);
  792. - sdio_release_host(sdiodev->func[1]);
  793. + sdio_release_host(sdiodev->func1);
  794. err = brcmf_bus_started(dev);
  795. if (err != 0) {
  796. @@ -4116,10 +4116,10 @@ static void brcmf_sdio_firmware_callback
  797. return;
  798. release:
  799. - sdio_release_host(sdiodev->func[1]);
  800. + sdio_release_host(sdiodev->func1);
  801. fail:
  802. brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
  803. - device_release_driver(&sdiodev->func[2]->dev);
  804. + device_release_driver(&sdiodev->func2->dev);
  805. device_release_driver(dev);
  806. }
  807. @@ -4146,7 +4146,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
  808. /* single-threaded workqueue */
  809. wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM,
  810. - dev_name(&sdiodev->func[1]->dev));
  811. + dev_name(&sdiodev->func1->dev));
  812. if (!wq) {
  813. brcmf_err("insufficient memory to create txworkqueue\n");
  814. goto fail;
  815. @@ -4173,7 +4173,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
  816. init_completion(&bus->watchdog_wait);
  817. bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread,
  818. bus, "brcmf_wdog/%s",
  819. - dev_name(&sdiodev->func[1]->dev));
  820. + dev_name(&sdiodev->func1->dev));
  821. if (IS_ERR(bus->watchdog_tsk)) {
  822. pr_warn("brcmf_watchdog thread failed to start\n");
  823. bus->watchdog_tsk = NULL;
  824. @@ -4199,7 +4199,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
  825. }
  826. /* Query the F2 block size, set roundup accordingly */
  827. - bus->blocksize = bus->sdiodev->func[2]->cur_blksize;
  828. + bus->blocksize = bus->sdiodev->func2->cur_blksize;
  829. bus->roundup = min(max_roundup, bus->blocksize);
  830. /* Allocate buffers */
  831. @@ -4215,17 +4215,17 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
  832. }
  833. }
  834. - sdio_claim_host(bus->sdiodev->func[1]);
  835. + sdio_claim_host(bus->sdiodev->func1);
  836. /* Disable F2 to clear any intermediate frame state on the dongle */
  837. - sdio_disable_func(bus->sdiodev->func[2]);
  838. + sdio_disable_func(bus->sdiodev->func2);
  839. bus->rxflow = false;
  840. /* Done with backplane-dependent accesses, can drop clock... */
  841. brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
  842. - sdio_release_host(bus->sdiodev->func[1]);
  843. + sdio_release_host(bus->sdiodev->func1);
  844. /* ...and initialize clock/power states */
  845. bus->clkstate = CLK_SDONLY;
  846. @@ -4277,7 +4277,7 @@ void brcmf_sdio_remove(struct brcmf_sdio
  847. if (bus->ci) {
  848. if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
  849. - sdio_claim_host(bus->sdiodev->func[1]);
  850. + sdio_claim_host(bus->sdiodev->func1);
  851. brcmf_sdio_wd_timer(bus, false);
  852. brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
  853. /* Leave the device in state where it is
  854. @@ -4287,7 +4287,7 @@ void brcmf_sdio_remove(struct brcmf_sdio
  855. msleep(20);
  856. brcmf_chip_set_passive(bus->ci);
  857. brcmf_sdio_clkctl(bus, CLK_NONE, false);
  858. - sdio_release_host(bus->sdiodev->func[1]);
  859. + sdio_release_host(bus->sdiodev->func1);
  860. }
  861. brcmf_chip_detach(bus->ci);
  862. }
  863. @@ -4334,9 +4334,9 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
  864. {
  865. int ret;
  866. - sdio_claim_host(bus->sdiodev->func[1]);
  867. + sdio_claim_host(bus->sdiodev->func1);
  868. ret = brcmf_sdio_bus_sleep(bus, sleep, false);
  869. - sdio_release_host(bus->sdiodev->func[1]);
  870. + sdio_release_host(bus->sdiodev->func1);
  871. return ret;
  872. }
  873. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
  874. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
  875. @@ -21,9 +21,6 @@
  876. #include <linux/firmware.h>
  877. #include "firmware.h"
  878. -/* Maximum number of I/O funcs */
  879. -#define NUM_SDIO_FUNCS 3
  880. -
  881. #define SDIOD_FBR_SIZE 0x100
  882. /* io_en */
  883. @@ -173,8 +170,8 @@ struct brcmf_sdio;
  884. struct brcmf_sdiod_freezer;
  885. struct brcmf_sdio_dev {
  886. - struct sdio_func *func[NUM_SDIO_FUNCS];
  887. - u8 num_funcs; /* Supported funcs on client */
  888. + struct sdio_func *func1;
  889. + struct sdio_func *func2;
  890. u32 sbwad; /* Save backplane window address */
  891. struct brcmf_core *cc_core; /* chipcommon core info struct */
  892. struct brcmf_sdio *bus;
  893. @@ -295,17 +292,17 @@ void brcmf_sdiod_intr_unregister(struct
  894. /* SDIO device register access interface */
  895. /* Accessors for SDIO Function 0 */
  896. #define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
  897. - sdio_f0_readb((sdiodev)->func[1], (addr), (r))
  898. + sdio_f0_readb((sdiodev)->func1, (addr), (r))
  899. #define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
  900. - sdio_f0_writeb((sdiodev)->func[1], (v), (addr), (ret))
  901. + sdio_f0_writeb((sdiodev)->func1, (v), (addr), (ret))
  902. /* Accessors for SDIO Function 1 */
  903. #define brcmf_sdiod_readb(sdiodev, addr, r) \
  904. - sdio_readb((sdiodev)->func[1], (addr), (r))
  905. + sdio_readb((sdiodev)->func1, (addr), (r))
  906. #define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
  907. - sdio_writeb((sdiodev)->func[1], (v), (addr), (ret))
  908. + sdio_writeb((sdiodev)->func1, (v), (addr), (ret))
  909. u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
  910. void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,