Lines Matching refs:chip

40 	int (*map_io)(struct v3020 *chip, struct platform_device *pdev,
42 void (*unmap_io)(struct v3020 *chip);
43 unsigned char (*read_bit)(struct v3020 *chip);
44 void (*write_bit)(struct v3020 *chip, unsigned char bit);
66 static int v3020_mmio_map(struct v3020 *chip, struct platform_device *pdev, in v3020_mmio_map() argument
75 chip->leftshift = pdata->leftshift; in v3020_mmio_map()
76 chip->ioaddress = ioremap(pdev->resource[0].start, 1); in v3020_mmio_map()
77 if (chip->ioaddress == NULL) in v3020_mmio_map()
83 static void v3020_mmio_unmap(struct v3020 *chip) in v3020_mmio_unmap() argument
85 iounmap(chip->ioaddress); in v3020_mmio_unmap()
88 static void v3020_mmio_write_bit(struct v3020 *chip, unsigned char bit) in v3020_mmio_write_bit() argument
90 writel(bit << chip->leftshift, chip->ioaddress); in v3020_mmio_write_bit()
93 static unsigned char v3020_mmio_read_bit(struct v3020 *chip) in v3020_mmio_read_bit() argument
95 return !!(readl(chip->ioaddress) & (1 << chip->leftshift)); in v3020_mmio_read_bit()
112 static int v3020_gpio_map(struct v3020 *chip, struct platform_device *pdev, in v3020_gpio_map() argument
125 chip->gpio = v3020_gpio; in v3020_gpio_map()
130 static void v3020_gpio_unmap(struct v3020 *chip) in v3020_gpio_unmap() argument
135 static void v3020_gpio_write_bit(struct v3020 *chip, unsigned char bit) in v3020_gpio_write_bit() argument
137 gpio_direction_output(chip->gpio[V3020_IO].gpio, bit); in v3020_gpio_write_bit()
138 gpio_set_value(chip->gpio[V3020_CS].gpio, 0); in v3020_gpio_write_bit()
139 gpio_set_value(chip->gpio[V3020_WR].gpio, 0); in v3020_gpio_write_bit()
141 gpio_set_value(chip->gpio[V3020_WR].gpio, 1); in v3020_gpio_write_bit()
142 gpio_set_value(chip->gpio[V3020_CS].gpio, 1); in v3020_gpio_write_bit()
145 static unsigned char v3020_gpio_read_bit(struct v3020 *chip) in v3020_gpio_read_bit() argument
149 gpio_direction_input(chip->gpio[V3020_IO].gpio); in v3020_gpio_read_bit()
150 gpio_set_value(chip->gpio[V3020_CS].gpio, 0); in v3020_gpio_read_bit()
151 gpio_set_value(chip->gpio[V3020_RD].gpio, 0); in v3020_gpio_read_bit()
153 bit = !!gpio_get_value(chip->gpio[V3020_IO].gpio); in v3020_gpio_read_bit()
155 gpio_set_value(chip->gpio[V3020_RD].gpio, 1); in v3020_gpio_read_bit()
156 gpio_set_value(chip->gpio[V3020_CS].gpio, 1); in v3020_gpio_read_bit()
168 static void v3020_set_reg(struct v3020 *chip, unsigned char address, in v3020_set_reg() argument
176 chip->ops->write_bit(chip, (tmp & 1)); in v3020_set_reg()
184 chip->ops->write_bit(chip, (data & 1)); in v3020_set_reg()
191 static unsigned char v3020_get_reg(struct v3020 *chip, unsigned char address) in v3020_get_reg() argument
197 chip->ops->write_bit(chip, (address & 1)); in v3020_get_reg()
204 if (chip->ops->read_bit(chip)) in v3020_get_reg()
214 struct v3020 *chip = dev_get_drvdata(dev); in v3020_read_time() local
218 v3020_set_reg(chip, V3020_CMD_CLOCK2RAM, 0); in v3020_read_time()
221 tmp = v3020_get_reg(chip, V3020_SECONDS); in v3020_read_time()
223 tmp = v3020_get_reg(chip, V3020_MINUTES); in v3020_read_time()
225 tmp = v3020_get_reg(chip, V3020_HOURS); in v3020_read_time()
227 tmp = v3020_get_reg(chip, V3020_MONTH_DAY); in v3020_read_time()
229 tmp = v3020_get_reg(chip, V3020_MONTH); in v3020_read_time()
231 tmp = v3020_get_reg(chip, V3020_WEEK_DAY); in v3020_read_time()
233 tmp = v3020_get_reg(chip, V3020_YEAR); in v3020_read_time()
251 struct v3020 *chip = dev_get_drvdata(dev); in v3020_set_time() local
262 v3020_set_reg(chip, V3020_SECONDS, bin2bcd(dt->tm_sec)); in v3020_set_time()
263 v3020_set_reg(chip, V3020_MINUTES, bin2bcd(dt->tm_min)); in v3020_set_time()
264 v3020_set_reg(chip, V3020_HOURS, bin2bcd(dt->tm_hour)); in v3020_set_time()
265 v3020_set_reg(chip, V3020_MONTH_DAY, bin2bcd(dt->tm_mday)); in v3020_set_time()
266 v3020_set_reg(chip, V3020_MONTH, bin2bcd(dt->tm_mon + 1)); in v3020_set_time()
267 v3020_set_reg(chip, V3020_WEEK_DAY, bin2bcd(dt->tm_wday)); in v3020_set_time()
268 v3020_set_reg(chip, V3020_YEAR, bin2bcd(dt->tm_year % 100)); in v3020_set_time()
271 v3020_set_reg(chip, V3020_CMD_RAM2CLOCK, 0); in v3020_set_time()
288 struct v3020 *chip; in rtc_probe() local
293 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); in rtc_probe()
294 if (!chip) in rtc_probe()
298 chip->ops = &v3020_gpio_ops; in rtc_probe()
300 chip->ops = &v3020_mmio_ops; in rtc_probe()
302 retval = chip->ops->map_io(chip, pdev, pdata); in rtc_probe()
309 temp = chip->ops->read_bit(chip); in rtc_probe()
313 v3020_set_reg(chip, V3020_SECONDS, 0x33); in rtc_probe()
314 if (v3020_get_reg(chip, V3020_SECONDS) != 0x33) { in rtc_probe()
321 v3020_set_reg(chip, V3020_STATUS_0, 0x0); in rtc_probe()
326 chip->gpio[V3020_CS].gpio, chip->gpio[V3020_WR].gpio, in rtc_probe()
327 chip->gpio[V3020_RD].gpio, chip->gpio[V3020_IO].gpio); in rtc_probe()
333 chip->leftshift); in rtc_probe()
335 platform_set_drvdata(pdev, chip); in rtc_probe()
337 chip->rtc = devm_rtc_device_register(&pdev->dev, "v3020", in rtc_probe()
339 if (IS_ERR(chip->rtc)) { in rtc_probe()
340 retval = PTR_ERR(chip->rtc); in rtc_probe()
347 chip->ops->unmap_io(chip); in rtc_probe()
354 struct v3020 *chip = platform_get_drvdata(dev); in rtc_remove() local
356 chip->ops->unmap_io(chip); in rtc_remove()