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);
71 static int v3020_mmio_map(struct v3020 *chip, struct platform_device *pdev, in v3020_mmio_map() argument
80 chip->leftshift = pdata->leftshift; in v3020_mmio_map()
81 chip->ioaddress = ioremap(pdev->resource[0].start, 1); in v3020_mmio_map()
82 if (chip->ioaddress == NULL) in v3020_mmio_map()
88 static void v3020_mmio_unmap(struct v3020 *chip) in v3020_mmio_unmap() argument
90 iounmap(chip->ioaddress); in v3020_mmio_unmap()
93 static void v3020_mmio_write_bit(struct v3020 *chip, unsigned char bit) in v3020_mmio_write_bit() argument
95 writel(bit << chip->leftshift, chip->ioaddress); in v3020_mmio_write_bit()
98 static unsigned char v3020_mmio_read_bit(struct v3020 *chip) in v3020_mmio_read_bit() argument
100 return !!(readl(chip->ioaddress) & (1 << chip->leftshift)); in v3020_mmio_read_bit()
117 static int v3020_gpio_map(struct v3020 *chip, struct platform_device *pdev, in v3020_gpio_map() argument
135 chip->gpio = v3020_gpio; in v3020_gpio_map()
146 static void v3020_gpio_unmap(struct v3020 *chip) in v3020_gpio_unmap() argument
154 static void v3020_gpio_write_bit(struct v3020 *chip, unsigned char bit) in v3020_gpio_write_bit() argument
156 gpio_direction_output(chip->gpio[V3020_IO].gpio, bit); in v3020_gpio_write_bit()
157 gpio_set_value(chip->gpio[V3020_CS].gpio, 0); in v3020_gpio_write_bit()
158 gpio_set_value(chip->gpio[V3020_WR].gpio, 0); in v3020_gpio_write_bit()
160 gpio_set_value(chip->gpio[V3020_WR].gpio, 1); in v3020_gpio_write_bit()
161 gpio_set_value(chip->gpio[V3020_CS].gpio, 1); in v3020_gpio_write_bit()
164 static unsigned char v3020_gpio_read_bit(struct v3020 *chip) in v3020_gpio_read_bit() argument
168 gpio_direction_input(chip->gpio[V3020_IO].gpio); in v3020_gpio_read_bit()
169 gpio_set_value(chip->gpio[V3020_CS].gpio, 0); in v3020_gpio_read_bit()
170 gpio_set_value(chip->gpio[V3020_RD].gpio, 0); in v3020_gpio_read_bit()
172 bit = !!gpio_get_value(chip->gpio[V3020_IO].gpio); in v3020_gpio_read_bit()
174 gpio_set_value(chip->gpio[V3020_RD].gpio, 1); in v3020_gpio_read_bit()
175 gpio_set_value(chip->gpio[V3020_CS].gpio, 1); in v3020_gpio_read_bit()
187 static void v3020_set_reg(struct v3020 *chip, unsigned char address, in v3020_set_reg() argument
195 chip->ops->write_bit(chip, (tmp & 1)); in v3020_set_reg()
203 chip->ops->write_bit(chip, (data & 1)); in v3020_set_reg()
210 static unsigned char v3020_get_reg(struct v3020 *chip, unsigned char address) in v3020_get_reg() argument
216 chip->ops->write_bit(chip, (address & 1)); in v3020_get_reg()
223 if (chip->ops->read_bit(chip)) in v3020_get_reg()
233 struct v3020 *chip = dev_get_drvdata(dev); in v3020_read_time() local
237 v3020_set_reg(chip, V3020_CMD_CLOCK2RAM, 0); in v3020_read_time()
240 tmp = v3020_get_reg(chip, V3020_SECONDS); in v3020_read_time()
242 tmp = v3020_get_reg(chip, V3020_MINUTES); in v3020_read_time()
244 tmp = v3020_get_reg(chip, V3020_HOURS); in v3020_read_time()
246 tmp = v3020_get_reg(chip, V3020_MONTH_DAY); in v3020_read_time()
248 tmp = v3020_get_reg(chip, V3020_MONTH); in v3020_read_time()
250 tmp = v3020_get_reg(chip, V3020_WEEK_DAY); in v3020_read_time()
252 tmp = v3020_get_reg(chip, V3020_YEAR); in v3020_read_time()
270 struct v3020 *chip = dev_get_drvdata(dev); in v3020_set_time() local
281 v3020_set_reg(chip, V3020_SECONDS, bin2bcd(dt->tm_sec)); in v3020_set_time()
282 v3020_set_reg(chip, V3020_MINUTES, bin2bcd(dt->tm_min)); in v3020_set_time()
283 v3020_set_reg(chip, V3020_HOURS, bin2bcd(dt->tm_hour)); in v3020_set_time()
284 v3020_set_reg(chip, V3020_MONTH_DAY, bin2bcd(dt->tm_mday)); in v3020_set_time()
285 v3020_set_reg(chip, V3020_MONTH, bin2bcd(dt->tm_mon + 1)); in v3020_set_time()
286 v3020_set_reg(chip, V3020_WEEK_DAY, bin2bcd(dt->tm_wday)); in v3020_set_time()
287 v3020_set_reg(chip, V3020_YEAR, bin2bcd(dt->tm_year % 100)); in v3020_set_time()
290 v3020_set_reg(chip, V3020_CMD_RAM2CLOCK, 0); in v3020_set_time()
307 struct v3020 *chip; in rtc_probe() local
312 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); in rtc_probe()
313 if (!chip) in rtc_probe()
317 chip->ops = &v3020_gpio_ops; in rtc_probe()
319 chip->ops = &v3020_mmio_ops; in rtc_probe()
321 retval = chip->ops->map_io(chip, pdev, pdata); in rtc_probe()
328 temp = chip->ops->read_bit(chip); in rtc_probe()
332 v3020_set_reg(chip, V3020_SECONDS, 0x33); in rtc_probe()
333 if (v3020_get_reg(chip, V3020_SECONDS) != 0x33) { in rtc_probe()
340 v3020_set_reg(chip, V3020_STATUS_0, 0x0); in rtc_probe()
345 chip->gpio[V3020_CS].gpio, chip->gpio[V3020_WR].gpio, in rtc_probe()
346 chip->gpio[V3020_RD].gpio, chip->gpio[V3020_IO].gpio); in rtc_probe()
352 chip->leftshift); in rtc_probe()
354 platform_set_drvdata(pdev, chip); in rtc_probe()
356 chip->rtc = devm_rtc_device_register(&pdev->dev, "v3020", in rtc_probe()
358 if (IS_ERR(chip->rtc)) { in rtc_probe()
359 retval = PTR_ERR(chip->rtc); in rtc_probe()
366 chip->ops->unmap_io(chip); in rtc_probe()
373 struct v3020 *chip = platform_get_drvdata(dev); in rtc_remove() local
375 chip->ops->unmap_io(chip); in rtc_remove()