| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- /*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- /*******************************************************************************
- *
- * Filename:
- * ---------
- * AudDrv_devtree_parser.c
- *
- * Project:
- * --------
- *
- *
- * Description:
- * ------------
- * AudDrv_devtree_parser
- *
- * Author:
- * -------
- * Chipeng Chang (mtk02308)
- *
- *------------------------------------------------------------------------------
- *
- *
- *******************************************************************************/
- #include "mt_auddrv_devtree_parser.h"
- static int bAuddrv_Dev_Tree_Init;
- static AUDDRV_I2S_ATTRIBUTE Auddrv_I2S_Setting[Auddrv_I2S_Num][Auddrv_I2S_Attribute_Num];
- static AUDDRV_I2S_ATTRIBUTE Auddrv_CLK_Setting[Auddrv_Attribute_num];
- static void Auddrv_Devtree_PinSet(void);
- AUDDRV_I2S_ATTRIBUTE *GetI2SSetting(uint32_t I2S_Number, uint32_t I2S_Setting)
- {
- AUDDRV_I2S_ATTRIBUTE *ret = NULL;
- if ((I2S_Number < Auddrv_I2S_Num) && (I2S_Setting < Auddrv_I2S_Attribute_Num))
- ret = &Auddrv_I2S_Setting[I2S_Number][I2S_Setting];
- return ret;
- }
- void Auddrv_Devtree_Init(void)
- {
- pr_debug("%s\n", __func__);
- if (bAuddrv_Dev_Tree_Init == false) {
- /* do some init routine */
- bAuddrv_Dev_Tree_Init = true;
- memset(&Auddrv_I2S_Setting[0][0], 0,
- sizeof(AUDDRV_I2S_ATTRIBUTE) * Auddrv_I2S_Num * Auddrv_I2S_Attribute_Num);
- memset(&Auddrv_CLK_Setting[0], 0,
- sizeof(AUDDRV_I2S_ATTRIBUTE) * Auddrv_Attribute_num);
- Auddrv_DevTree_I2S_Setting("mediatek,mt_soc_pcm_routing");
- Auddrv_Devtree_PinSet();
- Auddrv_Devtree_Dump();
- } else
- pr_debug("%s\n bAuddrv_Dev_Tree_Init = %d", __func__, bAuddrv_Dev_Tree_Init);
- }
- static void I2S0ConfigParse(struct device_node *node)
- {
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_CLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_CLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_DATGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_DATGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_DATAINGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_I00].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATAINGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_DATAINGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_I00].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_DATAINGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_MCLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_MCLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_WSGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_WSGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S0_WSGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S0_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S0_WSGPIO);
- }
- }
- static void I2S1ConfigParse(struct device_node *node)
- {
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_CLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_CLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_DATGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_DATGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_MCLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_MCLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_WSGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_WSGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S1_WSGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S1_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S1_WSGPIO);
- }
- }
- static void I2S2ConfigParse(struct device_node *node)
- {
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_CLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_CLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_DATGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_DATGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_MCLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_MCLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_WSGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_WSGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S2_WSGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S2_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S2_WSGPIO);
- }
- }
- static void I2S3ConfigParse(struct device_node *node)
- {
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_CLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_bck].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_CLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_bck].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_DATGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_D00].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_DATGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_D00].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_DATGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_MCLKGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_MCLKGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_Mclk].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_MCLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_WSGPIO, 0,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_ws].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_WSGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_I2S3_WSGPIO, 1,
- &(Auddrv_I2S_Setting[Auddrv_I2S3_Setting][Auddrv_I2S_Setting_ws].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_I2S3_WSGPIO);
- }
- }
- static void MtkInterfaceConfigParse(struct device_node *node)
- {
- if (of_property_read_u32_index
- (node, AUDDRV_AUD_CLKGPIO, 0, &(Auddrv_CLK_Setting[Auddrv_CLK_Mosi].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_AUD_CLKGPIO, 1, &(Auddrv_CLK_Setting[Auddrv_CLK_Mosi].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_CLKGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_AUD_DATIGPIO, 0,
- &(Auddrv_CLK_Setting[Auddrv_DataIn1_Mosi].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATIGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_AUD_DATIGPIO, 1, &(Auddrv_CLK_Setting[Auddrv_DataIn1_Mosi].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATIGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_AUD_DATOGPIO, 0,
- &(Auddrv_CLK_Setting[Auddrv_DataOut1_Mosi].Gpio_Number))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATOGPIO);
- }
- if (of_property_read_u32_index
- (node, AUDDRV_AUD_DATOGPIO, 1, &(Auddrv_CLK_Setting[Auddrv_DataOut1_Mosi].Gpio_Mode))) {
- pr_debug("%s %s not exist!!!\n", __func__, AUDDRV_AUD_DATOGPIO);
- }
- }
- /* base on devtree name to pares dev tree. */
- void Auddrv_DevTree_I2S_Setting(const char *DevTreeName)
- {
- struct device_node *node = NULL;
- pr_debug("%s\n", __func__);
- node = of_find_compatible_node(NULL, NULL, DevTreeName);
- if (node != NULL) {
- I2S0ConfigParse(node);
- I2S1ConfigParse(node);
- I2S2ConfigParse(node);
- I2S3ConfigParse(node);
- MtkInterfaceConfigParse(node);
- }
- }
- /* base on devtree name to pares dev tree. */
- static void Auddrv_Devtree_PinSet(void)
- {
- int I2S_Num = 0;
- int I2S_Attribute_Num = 0;
- pr_debug("+%s\n", __func__);
- for (I2S_Num = 0; I2S_Num < Auddrv_I2S_Num; I2S_Num++) {
- for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_I2S_Attribute_Num;
- I2S_Attribute_Num++) {
- pr_debug("Auddrv_I2S_Setting[%d][%d] gpio_num = %d gpio_mode = %d\n",
- I2S_Num, I2S_Attribute_Num,
- Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number,
- Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Mode);
- if (Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number) {
- Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number |=
- 0x80000000;
- }
- }
- }
- for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_Attribute_num; I2S_Attribute_Num++) {
- pr_debug("Auddrv_CLK_Setting[%d] gpio_num = %d gpio_mode = %d\n",
- I2S_Attribute_Num, Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number,
- Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Mode);
- if (Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number)
- Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number |= 0x80000000;
- }
- pr_debug("-%s\n", __func__);
- }
- /* base on devtree name to pares dev tree. */
- void Auddrv_Devtree_Dump(void)
- {
- int I2S_Num = 0;
- int I2S_Attribute_Num = 0;
- pr_debug("+%s\n", __func__);
- for (I2S_Num = 0; I2S_Num < Auddrv_I2S_Num; I2S_Num++) {
- for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_I2S_Attribute_Num;
- I2S_Attribute_Num++) {
- pr_debug("Auddrv_I2S_Setting[%d][%d] gpio_num = %d gpio_mode = %d\n",
- I2S_Num, I2S_Attribute_Num,
- Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Number,
- Auddrv_I2S_Setting[I2S_Num][I2S_Attribute_Num].Gpio_Mode);
- }
- }
- for (I2S_Attribute_Num = 0; I2S_Attribute_Num < Auddrv_Attribute_num; I2S_Attribute_Num++) {
- pr_debug("Auddrv_CLK_Setting[%d] gpio_num = %d gpio_mode = %d\n",
- I2S_Attribute_Num, Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Number,
- Auddrv_CLK_Setting[I2S_Attribute_Num].Gpio_Mode);
- }
- pr_debug("-%s\n", __func__);
- }
|