17 #ifdef CONFIG_GENERIC_GPIO 18 static int modparam_gpiobase = -1;
20 MODULE_PARM_DESC(gpiobase,
"The GPIO number base. -1 means dynamic, which is the default.");
24 #ifdef CONFIG_PARPORT_NOT_PC 32 unsigned char tms_data, tms_ctrl;
33 unsigned char tck_data, tck_ctrl;
34 unsigned char tdi_data, tdi_ctrl;
38 unsigned char tdo_sts, tdo_ctrl;
41 static const struct ppcable cables[];
42 static char *cablename =
"Minimal";
47 #ifdef CONFIG_GENERIC_GPIO 51 int mrf_gpio_request(
struct gpio_chip *chip,
unsigned offset)
59 void mrf_gpio_free(
struct gpio_chip *chip,
unsigned offset)
63 int mrf_gpio_get(
struct gpio_chip *chip,
unsigned offset)
67 void __iomem *plx = priv->
uio.mem[0].internal_addr;
78 void mrf_gpio_set(
struct gpio_chip *chip,
unsigned offset,
int value)
82 void __iomem *plx = priv->
uio.mem[0].internal_addr;
87 spin_lock(&priv->lock);
89 val = ioread32(plx +
GPIOC);
95 iowrite32(val, plx +
GPIOC);
97 spin_unlock(&priv->lock);
101 int mrf_gpio_dir_in(
struct gpio_chip *chip,
unsigned offset)
109 int mrf_gpio_dir_out(
struct gpio_chip *chip,
unsigned offset,
int value)
113 mrf_gpio_set(chip, offset, value);
117 void mrf_gpio_setup(
struct mrf_priv *priv)
121 priv->gpio.label = dev_name(&priv->
pdev->dev);
122 priv->gpio.owner = THIS_MODULE;
123 priv->gpio.base = modparam_gpiobase;
125 priv->gpio.can_sleep = 0;
126 priv->gpio.request = &mrf_gpio_request;
127 priv->gpio.free = &mrf_gpio_free;
128 priv->gpio.direction_input = &mrf_gpio_dir_in;
129 priv->gpio.direction_output = &mrf_gpio_dir_out;
130 priv->gpio.set = &mrf_gpio_set;
131 priv->gpio.get = &mrf_gpio_get;
137 ret = gpiochip_add(&priv->gpio);
139 dev_warn(&priv->
pdev->dev,
"GPIO setup error, JTAG unavailable\n");
141 priv->gpio_cleanup = 1;
142 dev_info(&priv->
pdev->dev,
"GPIO setup ok, JTAG available at bit %d\n",
147 void mrf_gpio_cleanup(
struct mrf_priv *priv)
149 if (priv->gpio_cleanup) {
150 int status = gpiochip_remove(&priv->gpio);
151 while (status==-EBUSY) {
153 status = gpiochip_remove(&priv->gpio);
155 BUG_ON(status && status!=-EBUSY);
156 dev_info(&priv->
pdev->dev,
"GPIO Cleaned up\n");
162 #ifdef CONFIG_PARPORT_NOT_PC 168 #define PPBITSET(REG, SIG, BIT) \ 169 if(dev->cable->SIG ## _ ## REG) {if(d & dev->cable->SIG ## _ ## REG) \ 170 {val |= GPIOC_pin_data(BIT);} else {val &= ~GPIOC_pin_data(BIT);}} 175 #define PPBITGET(REG, SIG, BIT) \ 176 if(dev->cable->SIG ## _ ## REG && val & GPIOC_pin_data(BIT)) \ 177 {ret |= dev->cable->SIG ## _ ## REG;} 179 static void mrfpp_write_data(
struct parport *port,
unsigned char d)
181 struct mrf_priv *dev = port->private_data;
182 void __iomem *plx = dev->
uio.mem[0].internal_addr;
185 spin_lock(&dev->lock);
187 spin_unlock(&dev->lock);
190 val = ioread32(plx +
GPIOC);
192 PPBITSET(data, tck, 0)
193 PPBITSET(data, tms, 1)
194 PPBITSET(data, tdi, 3)
197 iowrite32(val, plx +
GPIOC);
198 spin_unlock(&dev->lock);
201 static
void mrfpp_write_control(struct parport *port,
unsigned char d)
203 struct mrf_priv *dev = port->private_data;
204 void __iomem *plx = dev->
uio.mem[0].internal_addr;
209 spin_lock(&dev->lock);
211 spin_unlock(&dev->lock);
214 val = ioread32(plx + GPIOC);
216 PPBITSET(ctrl, tck, 0)
217 PPBITSET(ctrl, tms, 1)
218 PPBITSET(ctrl, tdi, 3)
221 iowrite32(val, plx + GPIOC);
222 spin_unlock(&dev->lock);
225 static
unsigned char mrfpp_read_data(struct parport *port)
227 unsigned char ret = 0;
228 struct mrf_priv *dev = port->private_data;
229 void __iomem *plx = dev->
uio.mem[0].internal_addr;
232 val = ioread32(plx + GPIOC);
233 PPBITGET(data, tck, 0)
234 PPBITGET(data, tms, 1)
235 PPBITGET(data, tdi, 3)
240 static
unsigned char mrfpp_read_control(struct parport *port)
242 unsigned char ret = 0;
243 struct mrf_priv *dev = port->private_data;
244 void __iomem *plx = dev->
uio.mem[0].internal_addr;
247 val = ioread32(plx + GPIOC);
248 PPBITGET(ctrl, tck, 0)
249 PPBITGET(ctrl, tms, 1)
250 PPBITGET(ctrl, tdo, 2)
251 PPBITGET(ctrl, tdi, 3)
257 static
unsigned char mrfpp_read_status(struct parport *port)
259 unsigned char ret = 0;
260 struct mrf_priv *dev = port->private_data;
261 void __iomem *plx = dev->
uio.mem[0].internal_addr;
264 val = ioread32(plx + GPIOC);
265 PPBITGET(sts, tdo, 2)
271 static
unsigned char mrfpp_frob_control(struct parport *dev,
unsigned char mask,
277 ret = mrfpp_read_control(dev);
278 ret = (ret & ~mask) ^ val;
279 mrfpp_write_control(dev, ret);
283 static void mrfpp_noop(
struct parport *dev) {}
285 static void mrfpp_initstate(
struct pardevice *dev,
struct parport_state *s)
292 static void mrfpp_savestate(
struct parport *dev,
struct parport_state *s)
294 s->u.pc.ctr = mrfpp_read_control(dev);
295 s->u.pc.ecr = mrfpp_read_data(dev);
297 static void mrfpp_restorestate(
struct parport *dev,
struct parport_state *s)
299 mrfpp_write_control(dev, s->u.pc.ctr);
300 mrfpp_write_data(dev, s->u.pc.ecr);
303 static struct parport_operations mrfppops = {
304 .owner = THIS_MODULE,
306 .write_data = mrfpp_write_data,
307 .write_control = mrfpp_write_control,
309 .read_data = mrfpp_read_data,
310 .read_status = mrfpp_read_status,
311 .read_control = mrfpp_read_control,
313 .frob_control = mrfpp_frob_control,
315 .enable_irq = mrfpp_noop,
316 .disable_irq = mrfpp_noop,
317 .data_forward = mrfpp_noop,
318 .data_reverse = mrfpp_noop,
320 .init_state = mrfpp_initstate,
321 .save_state = mrfpp_savestate,
322 .restore_state = mrfpp_restorestate,
325 void mrf_pp_setup(
struct mrf_priv* dev)
327 const struct ppcable *ccable = cables;
329 for(; ccable->name; ccable++) {
330 if(strcmp(ccable->name, cablename)==0)
334 dev_err(&dev->
pdev->dev,
"Cable '%s' is not defined\n", cablename);
338 dev->port = parport_register_port(0, PARPORT_IRQ_NONE,
343 dev_err(&dev->
pdev->dev,
"Failed to register parallel port\n");
348 dev->port->modes = PARPORT_MODE_PCSPP;
349 dev->port->private_data = dev;
350 dev->port->dev = &dev->
pdev->dev;
352 parport_announce_port(dev->port);
358 dev_info(&dev->
pdev->dev,
"Emulating cable: %s\n", ccable->name);
362 void mrf_pp_cleanup(
struct mrf_priv* priv)
365 parport_remove_port(priv->port);
372 static const struct ppcable cables[] =
382 .name =
"ByteBlaster",
#define GPIOC_pin_data(N)
module_param_named(interfaceversion, modparam_iversion, int, 0444)
MODULE_PARM_DESC(interfaceversion, "User space interface version")