Lines Matching full:chip

36 static int ds2404_gpio_map(struct ds2404 *chip, struct platform_device *pdev)  in ds2404_gpio_map()  argument
41 chip->rst_gpiod = devm_gpiod_get(dev, "rst", GPIOD_OUT_LOW); in ds2404_gpio_map()
42 if (IS_ERR(chip->rst_gpiod)) in ds2404_gpio_map()
43 return PTR_ERR(chip->rst_gpiod); in ds2404_gpio_map()
45 chip->clk_gpiod = devm_gpiod_get(dev, "clk", GPIOD_OUT_HIGH); in ds2404_gpio_map()
46 if (IS_ERR(chip->clk_gpiod)) in ds2404_gpio_map()
47 return PTR_ERR(chip->clk_gpiod); in ds2404_gpio_map()
49 chip->dq_gpiod = devm_gpiod_get(dev, "dq", GPIOD_ASIS); in ds2404_gpio_map()
50 if (IS_ERR(chip->dq_gpiod)) in ds2404_gpio_map()
51 return PTR_ERR(chip->dq_gpiod); in ds2404_gpio_map()
56 static void ds2404_reset(struct ds2404 *chip) in ds2404_reset() argument
58 gpiod_set_value(chip->rst_gpiod, 1); in ds2404_reset()
60 gpiod_set_value(chip->rst_gpiod, 0); in ds2404_reset()
61 gpiod_set_value(chip->clk_gpiod, 0); in ds2404_reset()
62 gpiod_direction_output(chip->dq_gpiod, 0); in ds2404_reset()
66 static void ds2404_write_byte(struct ds2404 *chip, u8 byte) in ds2404_write_byte() argument
70 gpiod_direction_output(chip->dq_gpiod, 1); in ds2404_write_byte()
72 gpiod_set_value(chip->dq_gpiod, byte & (1 << i)); in ds2404_write_byte()
74 gpiod_set_value(chip->clk_gpiod, 1); in ds2404_write_byte()
76 gpiod_set_value(chip->clk_gpiod, 0); in ds2404_write_byte()
81 static u8 ds2404_read_byte(struct ds2404 *chip) in ds2404_read_byte() argument
86 gpiod_direction_input(chip->dq_gpiod); in ds2404_read_byte()
89 gpiod_set_value(chip->clk_gpiod, 0); in ds2404_read_byte()
91 if (gpiod_get_value(chip->dq_gpiod)) in ds2404_read_byte()
93 gpiod_set_value(chip->clk_gpiod, 1); in ds2404_read_byte()
99 static void ds2404_read_memory(struct ds2404 *chip, u16 offset, in ds2404_read_memory() argument
102 ds2404_reset(chip); in ds2404_read_memory()
103 ds2404_write_byte(chip, DS2404_READ_MEMORY_CMD); in ds2404_read_memory()
104 ds2404_write_byte(chip, offset & 0xff); in ds2404_read_memory()
105 ds2404_write_byte(chip, (offset >> 8) & 0xff); in ds2404_read_memory()
107 *out++ = ds2404_read_byte(chip); in ds2404_read_memory()
110 static void ds2404_write_memory(struct ds2404 *chip, u16 offset, in ds2404_write_memory() argument
116 ds2404_reset(chip); in ds2404_write_memory()
117 ds2404_write_byte(chip, DS2404_WRITE_SCRATCHPAD_CMD); in ds2404_write_memory()
118 ds2404_write_byte(chip, offset & 0xff); in ds2404_write_memory()
119 ds2404_write_byte(chip, (offset >> 8) & 0xff); in ds2404_write_memory()
122 ds2404_write_byte(chip, out[i]); in ds2404_write_memory()
124 ds2404_reset(chip); in ds2404_write_memory()
125 ds2404_write_byte(chip, DS2404_READ_SCRATCHPAD_CMD); in ds2404_write_memory()
127 ta01 = ds2404_read_byte(chip); in ds2404_write_memory()
128 ta02 = ds2404_read_byte(chip); in ds2404_write_memory()
129 es = ds2404_read_byte(chip); in ds2404_write_memory()
132 if (out[i] != ds2404_read_byte(chip)) { in ds2404_write_memory()
133 dev_err(chip->dev, "read invalid data\n"); in ds2404_write_memory()
138 ds2404_reset(chip); in ds2404_write_memory()
139 ds2404_write_byte(chip, DS2404_COPY_SCRATCHPAD_CMD); in ds2404_write_memory()
140 ds2404_write_byte(chip, ta01); in ds2404_write_memory()
141 ds2404_write_byte(chip, ta02); in ds2404_write_memory()
142 ds2404_write_byte(chip, es); in ds2404_write_memory()
144 while (gpiod_get_value(chip->dq_gpiod)) in ds2404_write_memory()
148 static void ds2404_enable_osc(struct ds2404 *chip) in ds2404_enable_osc() argument
152 ds2404_write_memory(chip, 0x201, 1, in); in ds2404_enable_osc()
157 struct ds2404 *chip = dev_get_drvdata(dev); in ds2404_read_time() local
161 ds2404_read_memory(chip, 0x203, 4, (u8 *)&hw_time); in ds2404_read_time()
170 struct ds2404 *chip = dev_get_drvdata(dev); in ds2404_set_time() local
172 ds2404_write_memory(chip, 0x203, 4, (u8 *)&time); in ds2404_set_time()
183 struct ds2404 *chip; in rtc_probe() local
187 chip = devm_kzalloc(&pdev->dev, sizeof(struct ds2404), GFP_KERNEL); in rtc_probe()
188 if (!chip) in rtc_probe()
191 chip->dev = &pdev->dev; in rtc_probe()
197 retval = ds2404_gpio_map(chip, pdev); in rtc_probe()
201 platform_set_drvdata(pdev, chip); in rtc_probe()
210 ds2404_enable_osc(chip); in rtc_probe()