tc358767.c (c1de02bbeca58894c805b3d45c2da4bf30cfc5d9) | tc358767.c (0b4c48f3e315d172e4cc06e10f2c8ba180788baf) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * TC358767/TC358867/TC9595 DSI/DPI-to-DPI/(e)DP bridge driver 4 * 5 * The TC358767/TC358867/TC9595 can operate in multiple modes. 6 * All modes are supported -- DPI->(e)DP / DSI->DPI / DSI->(e)DP . 7 * 8 * Copyright (C) 2016 CogentEmbedded Inc --- 2019 unchanged lines hidden (view full) --- 2028 return tc_probe_edp_bridge_endpoint(tc); 2029 } 2030 2031 dev_warn(dev, "Invalid mode (0x%x) is not supported!\n", mode); 2032 2033 return -EINVAL; 2034} 2035 | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * TC358767/TC358867/TC9595 DSI/DPI-to-DPI/(e)DP bridge driver 4 * 5 * The TC358767/TC358867/TC9595 can operate in multiple modes. 6 * All modes are supported -- DPI->(e)DP / DSI->DPI / DSI->(e)DP . 7 * 8 * Copyright (C) 2016 CogentEmbedded Inc --- 2019 unchanged lines hidden (view full) --- 2028 return tc_probe_edp_bridge_endpoint(tc); 2029 } 2030 2031 dev_warn(dev, "Invalid mode (0x%x) is not supported!\n", mode); 2032 2033 return -EINVAL; 2034} 2035 |
2036static void tc_clk_disable(void *data) 2037{ 2038 struct clk *refclk = data; 2039 2040 clk_disable_unprepare(refclk); 2041} 2042 |
|
2036static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) 2037{ 2038 struct device *dev = &client->dev; 2039 struct tc_data *tc; 2040 int ret; 2041 2042 tc = devm_kzalloc(dev, sizeof(*tc), GFP_KERNEL); 2043 if (!tc) 2044 return -ENOMEM; 2045 2046 tc->dev = dev; 2047 2048 ret = tc_probe_bridge_endpoint(tc); 2049 if (ret) 2050 return ret; 2051 | 2043static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) 2044{ 2045 struct device *dev = &client->dev; 2046 struct tc_data *tc; 2047 int ret; 2048 2049 tc = devm_kzalloc(dev, sizeof(*tc), GFP_KERNEL); 2050 if (!tc) 2051 return -ENOMEM; 2052 2053 tc->dev = dev; 2054 2055 ret = tc_probe_bridge_endpoint(tc); 2056 if (ret) 2057 return ret; 2058 |
2059 tc->refclk = devm_clk_get(dev, "ref"); 2060 if (IS_ERR(tc->refclk)) { 2061 ret = PTR_ERR(tc->refclk); 2062 dev_err(dev, "Failed to get refclk: %d\n", ret); 2063 return ret; 2064 } 2065 2066 ret = clk_prepare_enable(tc->refclk); 2067 if (ret) 2068 return ret; 2069 2070 ret = devm_add_action_or_reset(dev, tc_clk_disable, tc->refclk); 2071 if (ret) 2072 return ret; 2073 2074 /* tRSTW = 100 cycles , at 13 MHz that is ~7.69 us */ 2075 usleep_range(10, 15); 2076 |
|
2052 /* Shut down GPIO is optional */ 2053 tc->sd_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH); 2054 if (IS_ERR(tc->sd_gpio)) 2055 return PTR_ERR(tc->sd_gpio); 2056 2057 if (tc->sd_gpio) { 2058 gpiod_set_value_cansleep(tc->sd_gpio, 0); 2059 usleep_range(5000, 10000); --- 4 unchanged lines hidden (view full) --- 2064 if (IS_ERR(tc->reset_gpio)) 2065 return PTR_ERR(tc->reset_gpio); 2066 2067 if (tc->reset_gpio) { 2068 gpiod_set_value_cansleep(tc->reset_gpio, 1); 2069 usleep_range(5000, 10000); 2070 } 2071 | 2077 /* Shut down GPIO is optional */ 2078 tc->sd_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH); 2079 if (IS_ERR(tc->sd_gpio)) 2080 return PTR_ERR(tc->sd_gpio); 2081 2082 if (tc->sd_gpio) { 2083 gpiod_set_value_cansleep(tc->sd_gpio, 0); 2084 usleep_range(5000, 10000); --- 4 unchanged lines hidden (view full) --- 2089 if (IS_ERR(tc->reset_gpio)) 2090 return PTR_ERR(tc->reset_gpio); 2091 2092 if (tc->reset_gpio) { 2093 gpiod_set_value_cansleep(tc->reset_gpio, 1); 2094 usleep_range(5000, 10000); 2095 } 2096 |
2072 tc->refclk = devm_clk_get(dev, "ref"); 2073 if (IS_ERR(tc->refclk)) { 2074 ret = PTR_ERR(tc->refclk); 2075 dev_err(dev, "Failed to get refclk: %d\n", ret); 2076 return ret; 2077 } 2078 | |
2079 tc->regmap = devm_regmap_init_i2c(client, &tc_regmap_config); 2080 if (IS_ERR(tc->regmap)) { 2081 ret = PTR_ERR(tc->regmap); 2082 dev_err(dev, "Failed to initialize regmap: %d\n", ret); 2083 return ret; 2084 } 2085 2086 ret = of_property_read_u32(dev->of_node, "toshiba,hpd-pin", --- 128 unchanged lines hidden --- | 2097 tc->regmap = devm_regmap_init_i2c(client, &tc_regmap_config); 2098 if (IS_ERR(tc->regmap)) { 2099 ret = PTR_ERR(tc->regmap); 2100 dev_err(dev, "Failed to initialize regmap: %d\n", ret); 2101 return ret; 2102 } 2103 2104 ret = of_property_read_u32(dev->of_node, "toshiba,hpd-pin", --- 128 unchanged lines hidden --- |