|
7 | 7 | * Date Author Notes |
8 | 8 | * 2021-07-29 KyleChan first version |
9 | 9 | * 2022-01-19 Sherman add PIN2IRQX_TABLE |
| 10 | + * 2025-01-13 newflydd pin_get for RZ |
10 | 11 | */ |
11 | 12 |
|
12 | 13 | #include <drv_gpio.h> |
@@ -304,37 +305,31 @@ static rt_err_t ra_pin_dettach_irq(struct rt_device *device, rt_base_t pin) |
304 | 305 |
|
305 | 306 | static rt_base_t ra_pin_get(const char *name) |
306 | 307 | { |
307 | | - int pin_number = -1, port = -1, pin = -1; |
308 | | - |
309 | | - if (rt_strlen(name) != 4) |
310 | | - return -1; |
311 | | - |
312 | | - if ((name[0] == 'P' || name[0] == 'p')) |
| 308 | +#ifdef SOC_FAMILY_RENESAS_RZ |
| 309 | + /* RZ series: use "PXX_X" format, like "P01_1" */ |
| 310 | + if ((rt_strlen(name) == 5) && |
| 311 | + ((name[0] == 'P') || (name[0] == 'p')) && |
| 312 | + (name[3] == '_') && |
| 313 | + ('0' <= (int) name[1] && (int) name[1] <= '1') && |
| 314 | + ('0' <= (int) name[2] && (int) name[2] <= '9') && |
| 315 | + ('0' <= (int) name[4] && (int) name[4] <= '7')) |
313 | 316 | { |
314 | | - if ('0' <= name[1] && name[1] <= '9') |
315 | | - { |
316 | | - port = (name[1] - '0') * 16 * 16; |
317 | | - if ('0' <= name[2] && name[2] <= '9' && '0' <= name[3] && name[3] <= '9') |
318 | | - { |
319 | | - pin = (name[2] - '0') * 10 + (name[3] - '0'); |
320 | | - pin_number = port + pin; |
321 | | - |
322 | | - return pin_number; |
323 | | - } |
324 | | - } |
325 | | - else if ('A' <= name[1] && name[1] <= 'Z') |
326 | | - { |
327 | | - port = (name[1] - '0' - 7) * 16 * 16; |
328 | | - if ('0' <= name[2] && name[2] <= '9' && '0' <= name[3] && name[3] <= '9') |
329 | | - { |
330 | | - pin = (name[2] - '0') * 10 + (name[3] - '0'); |
331 | | - pin_number = port + pin; |
332 | | - |
333 | | - return pin_number; |
334 | | - } |
335 | | - } |
| 317 | + return (((int) name[1] - '0') * 10 + ((int) name[2] - '0')) * 0x100 + ((int) name[4] - '0'); |
| 318 | + } |
| 319 | + LOG_W("Invalid pin expression, use `PXX_X` format like `P01_1`"); |
| 320 | +#else |
| 321 | + /* RA series: use "PXXX" format, like "P101"*/ |
| 322 | + if ((rt_strlen(name) == 4) && |
| 323 | + (name[0] == 'P' || name[0] == 'p') && |
| 324 | + (name[1] >= '0' && name[1] <= '9') && |
| 325 | + (name[2] >= '0' && name[1] <= '9') && |
| 326 | + (name[3] >= '0' && name[1] <= '9')) |
| 327 | + { |
| 328 | + return (name[1] - '0') * 0x100 + (name[2] - '0') * 10 + (name[3] - '0'); |
336 | 329 | } |
337 | | - return -1; |
| 330 | + LOG_W("Invalid pin expression, use `PXXX` format like `P101`"); |
| 331 | +#endif |
| 332 | + return -RT_ERROR; |
338 | 333 | } |
339 | 334 |
|
340 | 335 | const static struct rt_pin_ops _ra_pin_ops = |
|
0 commit comments