hc
2024-03-26 e0728245c89800c2038c23308f2d88969d5b41c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * maxim-max96789.c  --  I2C register interface access for max96789 serdes chip
 *
 * Copyright (c) 2023-2028 Rockchip Electronics Co. Ltd.
 *
 * Author: luowei <lw@rock-chips.com>
 */
 
#include <serdes-display-core.h>
#include "maxim-max96789.h"
 
int max96789_bridge_init(struct serdes *serdes)
{
   return 0;
}
 
static bool max96789_bridge_detect(struct serdes *serdes)
{
   u32 val;
 
   if (dm_gpio_is_valid(&serdes->lock_gpio)) {
       if (!dm_gpio_get_value(&serdes->lock_gpio))
           return false;
   }
 
   if (serdes_reg_read(serdes, 0x0013, &val))
       return false;
 
   if (!FIELD_GET(LOCKED, val))
       return false;
 
   return true;
}
 
static int max96789_bridge_enable(struct serdes *serdes)
{
   int ret = 0;
 
   SERDES_DBG_CHIP("%s: serdes chip %s ret=%d\n",
           __func__, serdes->chip_data->name, ret);
   return ret;
}
 
static int max96789_bridge_disable(struct serdes *serdes)
{
   int ret = 0;
 
   ret = serdes_set_bits(serdes, 0x0002, VID_TX_EN_X,
                 FIELD_PREP(VID_TX_EN_X, 0));
 
   return ret;
}
 
static struct serdes_chip_bridge_ops max96789_bridge_ops = {
   .init = max96789_bridge_init,
   .detect = max96789_bridge_detect,
   .enable = max96789_bridge_enable,
   .disable = max96789_bridge_disable,
};
 
struct serdes_chip_data serdes_max96789_data = {
   .name        = "max96789",
   .serdes_type    = TYPE_SER,
   .serdes_id    = MAXIM_ID_MAX96789,
   .bridge_ops    = &max96789_bridge_ops,
};
EXPORT_SYMBOL_GPL(serdes_max96789_data);