spibusvar.h (5f31d14a92353b6b0acf6960511b3acf3911d163) spibusvar.h (3c086734381945f6d779a98582d8eae3edca0b68)
1/*-
2 * Copyright (c) 2006 M. Warner Losh <imp@FreeBSD.org>
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 29 unchanged lines hidden (view full) ---

38#define SPIBUS_MODE_CPOL 2
39#define SPIBUS_MODE_CPOL_CPHA 3
40
41struct spibus_ivar
42{
43 uint32_t cs;
44 uint32_t mode;
45 uint32_t clock;
1/*-
2 * Copyright (c) 2006 M. Warner Losh <imp@FreeBSD.org>
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 29 unchanged lines hidden (view full) ---

38#define SPIBUS_MODE_CPOL 2
39#define SPIBUS_MODE_CPOL_CPHA 3
40
41struct spibus_ivar
42{
43 uint32_t cs;
44 uint32_t mode;
45 uint32_t clock;
46 uint32_t cs_delay;
46 struct resource_list rl;
47};
48
49#define SPIBUS_CS_HIGH (1U << 31)
50
51enum {
52 SPIBUS_IVAR_CS, /* chip select that we're on */
53 SPIBUS_IVAR_MODE, /* SPI mode (0-3) */
54 SPIBUS_IVAR_CLOCK, /* maximum clock freq for device */
47 struct resource_list rl;
48};
49
50#define SPIBUS_CS_HIGH (1U << 31)
51
52enum {
53 SPIBUS_IVAR_CS, /* chip select that we're on */
54 SPIBUS_IVAR_MODE, /* SPI mode (0-3) */
55 SPIBUS_IVAR_CLOCK, /* maximum clock freq for device */
56 SPIBUS_IVAR_CS_DELAY, /* delay in microseconds after toggling chip select */
55};
56
57#define SPIBUS_ACCESSOR(A, B, T) \
58static inline int \
59spibus_get_ ## A(device_t dev, T *t) \
60{ \
61 return BUS_READ_IVAR(device_get_parent(dev), dev, \
62 SPIBUS_IVAR_ ## B, (uintptr_t *) t); \
63} \
64static inline int \
65spibus_set_ ## A(device_t dev, T t) \
66{ \
67 return BUS_WRITE_IVAR(device_get_parent(dev), dev, \
68 SPIBUS_IVAR_ ## B, (uintptr_t) t); \
69}
70
71SPIBUS_ACCESSOR(cs, CS, uint32_t)
72SPIBUS_ACCESSOR(mode, MODE, uint32_t)
73SPIBUS_ACCESSOR(clock, CLOCK, uint32_t)
57};
58
59#define SPIBUS_ACCESSOR(A, B, T) \
60static inline int \
61spibus_get_ ## A(device_t dev, T *t) \
62{ \
63 return BUS_READ_IVAR(device_get_parent(dev), dev, \
64 SPIBUS_IVAR_ ## B, (uintptr_t *) t); \
65} \
66static inline int \
67spibus_set_ ## A(device_t dev, T t) \
68{ \
69 return BUS_WRITE_IVAR(device_get_parent(dev), dev, \
70 SPIBUS_IVAR_ ## B, (uintptr_t) t); \
71}
72
73SPIBUS_ACCESSOR(cs, CS, uint32_t)
74SPIBUS_ACCESSOR(mode, MODE, uint32_t)
75SPIBUS_ACCESSOR(clock, CLOCK, uint32_t)
76SPIBUS_ACCESSOR(cs_delay, CS_DELAY, uint32_t)
74
75extern driver_t spibus_driver;
76extern driver_t ofw_spibus_driver;
77
78extern driver_t spibus_driver;
79extern driver_t ofw_spibus_driver;